問題 #2 - 回答 #159

Base32

RFC 4648 で定義された Base32 エンコーディングを実装してください。 標準入力から与えられる各行に対し、Base32 エンコードをおこなった文字列を標準出力へ改行区切りで出力してください。 なお、アルファベットの出力には大文字を用いてください。

回答 #159

zonepotage が 2024-03-09 16:57:29 に投稿

コード

808 byte

while ($plaintext = fgets(STDIN)) {
        $text = '';
        $bit = 0;
        $value = 0;
        $i = 0;

        while(($bit >= 5) || ($i < strlen($plaintext))){
            if($i < strlen($plaintext)){
                $value = ($value * 256) + ord($plaintext[$i]);
                $bit+= 8;
                $i++;
            }
            $bit -= 5;
            $code =  (int)($value / pow(2,$bit));
            $text .= chr($code + 65 - ($code > 25 ? 41 : 0));
            $value %= (pow(2, $bit));
            if(($bit < 5) && ($bit > 0) && ($i >= strlen($plaintext))){
                $value *=  pow(2,5 - $bit);
                $bit = 5;
            }
        }
        if(strlen($text) % 8){
            $text .= str_repeat("=",8 - strlen($text) % 8);
        }
        echo $text, PHP_EOL;
    }

実行結果

ステータス: 失敗

テストケース 1

ステータス: 不正解

標準出力

NBXWOZIK
OBUXS3YK
MZ2WOYIK

標準エラー出力


テストケース 2

ステータス: 実行時エラー

標準出力


Deprecated: Implicit conversion from float 2346943114 to int loses precision in php.wasm code on line 21

Deprecated: Implicit conversion from float -17657853213 to int loses precision in php.wasm code on line 21

Deprecated: Implicit conversion from float -122363911295 to int loses precision in php.wasm code on line 21

Deprecated: Implicit conversion from float 8589934592 to int loses precision in php.wasm code on line 21

Fatal error: Uncaught DivisionByZeroError: Modulo by zero in php.wasm code:21
Stack trace:
#0 {main}
  thrown in php.wasm code on line 21

標準エラー出力


テストケース 3

ステータス: 実行時エラー

標準出力

GEZDGNBVGY3QU===
GEZAU===

Deprecated: Implicit conversion from float 26696235312 to int loses precision in php.wasm code on line 21

Deprecated: Implicit conversion from float 237166473226 to int loses precision in php.wasm code on line 21

Deprecated: Implicit conversion from float 8589934592 to int loses precision in php.wasm code on line 21

Fatal error: Uncaught DivisionByZeroError: Modulo by zero in php.wasm code:21
Stack trace:
#0 {main}
  thrown in php.wasm code on line 21

標準エラー出力


テストケース 4

ステータス: 実行時エラー

標準出力

MEQGEIDDBI======

Deprecated: Implicit conversion from float 3816916000 to int loses precision in php.wasm code on line 21

Deprecated: Implicit conversion from float -19301916445 to int loses precision in php.wasm code on line 21

Deprecated: Implicit conversion from float -268366191743 to int loses precision in php.wasm code on line 21

Deprecated: Implicit conversion from float 8589934592 to int loses precision in php.wasm code on line 21

Fatal error: Uncaught DivisionByZeroError: Modulo by zero in php.wasm code:21
Stack trace:
#0 {main}
  thrown in php.wasm code on line 21

標準エラー出力