問題 #2 - 回答 #143

Base32

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

回答 #143

keitamax が 2024-03-09 10:39:08 に投稿

コード

429 byte

$t=array_merge(range('A','Z'),range('2','7'));
while($line=STDIN) {
$line=rtrim($line);
$bits='';
for($i=0;$i++<strlen($line);) {
$bits.=str_pad(base_convert(strval(ord($line[$i])),10,2),8,'0',STR_PAD_LEFT);
}
$base32='';
foreach(str_split($bits,5)as$b) {
$base32.=t[base_convert(str_pad($b,5,'0'),2,10)];
}
$base32.=match(strlen($bits)%40){
8=>'======',
16=>'====',
24=>'===',
32=>'=',
default => '',
};
echo $base32, PHP_EOL;
}

実行結果

ステータス: 失敗

テストケース 1

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

標準出力


Fatal error: Uncaught TypeError: rtrim(): Argument #1 ($string) must be of type string, resource given in php.wasm code:8
Stack trace:
#0 php.wasm code(8): rtrim(Resource id #2)
#1 {main}
  thrown in php.wasm code on line 8

標準エラー出力


テストケース 2

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

標準出力


Fatal error: Uncaught TypeError: rtrim(): Argument #1 ($string) must be of type string, resource given in php.wasm code:8
Stack trace:
#0 php.wasm code(8): rtrim(Resource id #2)
#1 {main}
  thrown in php.wasm code on line 8

標準エラー出力


テストケース 3

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

標準出力


Fatal error: Uncaught TypeError: rtrim(): Argument #1 ($string) must be of type string, resource given in php.wasm code:8
Stack trace:
#0 php.wasm code(8): rtrim(Resource id #2)
#1 {main}
  thrown in php.wasm code on line 8

標準エラー出力


テストケース 4

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

標準出力


Fatal error: Uncaught TypeError: rtrim(): Argument #1 ($string) must be of type string, resource given in php.wasm code:8
Stack trace:
#0 php.wasm code(8): rtrim(Resource id #2)
#1 {main}
  thrown in php.wasm code on line 8

標準エラー出力