問題 #2 - 回答 #23
Base32
RFC 4648 で定義された Base32 エンコーディングを実装してください。 標準入力から与えられる各行に対し、Base32 エンコードをおこなった文字列を標準出力へ改行区切りで出力してください。 なお、アルファベットの出力には大文字を用いてください。
回答 #23
yamamoto-hiroya が 2024-03-07 23:29:14 に投稿
コード
474 byte
const A='ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
while ($l = fgets(STDIN)) {
$l = rtrim($l);
$b = $c = '';
for ($i = 0; $i < strlen($l); $i++) {
$b .= str_pad(base_convert(strval(ord($l[$i])), 10, 2), 8, '0', STR_PAD_LEFT);
}
foreach (str_split($b, 5) as $b) {
$c .= A[base_convert(str_pad($b, 5, '0'), 2, 10)];
}
$c .= match (strlen($b) % 40) {
8 => '======',
16 => '====',
24 => '===',
32 => '=',
default => '',
};
echo $c, "\n";
}
実行結果
ステータス: 失敗
テストケース 1
ステータス: 不正解
標準出力
NBXWOZI
OBUXS3Y
MZ2WOYI
標準エラー出力
テストケース 2
ステータス: OK
標準出力
4OAYNY4BRPRYFCXDQGX6HAMS
4OA2VY4BRTRYFCPDQGDOHAMX
4OBI7Y4BTHRYFCPDQKBOHANB
標準エラー出力
テストケース 3
ステータス: 不正解
標準出力
GEZDGNBVGY3Q
GEZA
GEZDGNBVGY3TQOJQ
GEZDGNBVGY3TQ
GEZDG
GEZDGNBV
GEZDGNBVGY3TQOI
GEZDGNA
GE
GEZDGNBVGY
標準エラー出力
テストケース 4
ステータス: OK
標準出力
MEQGEIDD
EAQOHAMC4OAYIIHDQGDCBY4BRAQOHAMK
標準エラー出力