問題 #2 - 回答 #90

Base32

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

回答 #90

hanhan1978 が 2024-03-08 15:52:02 に投稿

コード

404 byte

<?php
$T = str_split('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567');
while ($l = fgets(STDIN)) {
  $l = rtrim($l);
  $bi = '';
  foreach(mb_str_split($l) as $m){
    $bi .= str_pad(base_convert(ord($m), 10, 2), 8, '0', 0);
  }
  $b3 = '';
  foreach (str_split($bi, 5) as $b) {
    $b3 .= $T[base_convert(str_pad($b, 5, '0'), 2, 10)];
  }
  echo $b3 .= str_repeat('=', [8=>6,16=>4,24=>3,32=>1][strlen($bi)%40]??0), "\n";
}

実行結果

ステータス: 失敗

テストケース 1

ステータス: OK

標準出力

NBXWOZI=
OBUXS3Y=
MZ2WOYI=

標準エラー出力


テストケース 2

ステータス: 不正解

標準出力

4PR6HY7D
4PR6HY7D
4PR6HY7D

標準エラー出力


テストケース 3

ステータス: OK

標準出力

GEZDGNBVGY3Q====
GEZA====
GEZDGNBVGY3TQOJQ
GEZDGNBVGY3TQ===
GEZDG===
GEZDGNBV
GEZDGNBVGY3TQOI=
GEZDGNA=
GE======
GEZDGNBVGY======

標準エラー出力


テストケース 4

ステータス: 不正解

標準出力

MEQGEIDD
EAQOHYZA4MQOGIHD

標準エラー出力