問題 #2 - 回答 #55
Base32
RFC 4648 で定義された Base32 エンコーディングを実装してください。 標準入力から与えられる各行に対し、Base32 エンコードをおこなった文字列を標準出力へ改行区切りで出力してください。 なお、アルファベットの出力には大文字を用いてください。
回答 #55
kunikiya が 2024-03-08 02:29:59 に投稿
コード
484 byte
$t = array_merge(range('A','Z'),range(2,7));
while ($line = rtrim(fgets(STDIN))) {
$bi = '';
for ($i = 0; $i < strlen($line); $i++) {
$bi .= str_pad(base_convert(strval(ord($line[$i])), 10, 2), 8, '0', STR_PAD_LEFT);
}
$b = '';
foreach (str_split($bi, 5) as $b) {
$b .= $t[base_convert(str_pad($b, 5, '0'), 2, 10)];
}
$b .= match (strlen($bi) % 40) {
8 => '======',
16 => '====',
24 => '===',
32 => '=',
default => '',
};
echo $b, "\n";
}
実行結果
ステータス: 失敗
テストケース 1
ステータス: 不正解
標準出力
01I=
11Y=
01I=
標準エラー出力
テストケース 2
ステータス: 不正解
標準出力
10010S
10111X
00001B
標準エラー出力
テストケース 3
ステータス: 不正解
標準出力
1Q====
0A====
10000Q
1000Q===
0011G===
10101V
01I=
00A=
001E======
110Y======
標準エラー出力
テストケース 4
ステータス: 不正解
標準出力
00011D
01010K
標準エラー出力