問題 #2 - 回答 #138

Base32

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

回答 #138

basi が 2024-03-09 04:48:38 に投稿

コード

348 byte

while ($l = fgets(STDIN)) {
    $b = '';
    foreach (str_split(rtrim($l)) as $c) {
        $b .= sprintf('%08b', ord($c));
    }
    $m = strlen($b) % 40;
    foreach (str_split($b, 5) as $z) {
        @$p .= (join(range('A', 'Z')) . '234567')[bindec(str_pad($z, 5, '0'))];
    }
    echo $p . str_repeat('=', ($m ? 8 - ceil($m / 5) : 0)) . '
';
}

実行結果

ステータス: 失敗

テストケース 1

ステータス: 不正解

標準出力

NBXWOZI=
NBXWOZIOBUXS3Y=
NBXWOZIOBUXS3YMZ2WOYI=

標準エラー出力


テストケース 2

ステータス: 不正解

標準出力

4OAYNY4BRPRYFCXDQGX6HAMS
4OAYNY4BRPRYFCXDQGX6HAMS4OA2VY4BRTRYFCPDQGDOHAMX
4OAYNY4BRPRYFCXDQGX6HAMS4OA2VY4BRTRYFCPDQGDOHAMX4OBI7Y4BTHRYFCPDQKBOHANB

標準エラー出力


テストケース 3

ステータス: 不正解

標準出力

GEZDGNBVGY3Q====
GEZDGNBVGY3QGEZA====
GEZDGNBVGY3QGEZAGEZDGNBVGY3TQOJQ
GEZDGNBVGY3QGEZAGEZDGNBVGY3TQOJQGEZDGNBVGY3TQ===
GEZDGNBVGY3QGEZAGEZDGNBVGY3TQOJQGEZDGNBVGY3TQGEZDG===
GEZDGNBVGY3QGEZAGEZDGNBVGY3TQOJQGEZDGNBVGY3TQGEZDGGEZDGNBV
GEZDGNBVGY3QGEZAGEZDGNBVGY3TQOJQGEZDGNBVGY3TQGEZDGGEZDGNBVGEZDGNBVGY3TQOI=
GEZDGNBVGY3QGEZAGEZDGNBVGY3TQOJQGEZDGNBVGY3TQGEZDGGEZDGNBVGEZDGNBVGY3TQOIGEZDGNA=
GEZDGNBVGY3QGEZAGEZDGNBVGY3TQOJQGEZDGNBVGY3TQGEZDGGEZDGNBVGEZDGNBVGY3TQOIGEZDGNAGE======
GEZDGNBVGY3QGEZAGEZDGNBVGY3TQOJQGEZDGNBVGY3TQGEZDGGEZDGNBVGEZDGNBVGY3TQOIGEZDGNAGEGEZDGNBVGY======

標準エラー出力


テストケース 4

ステータス: 不正解

標準出力

MEQGEIDD
MEQGEIDDEAQOHAMC4OAYIIHDQGDCBY4BRAQOHAMK

標準エラー出力