問題 #2

Base32

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

実装例

const TABLE = [
  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
  'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
  'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
  'Y', 'Z', '2', '3', '4', '5', '6', '7',
];
while ($line = fgets(STDIN)) {
  $line = rtrim($line);
  $bits = '';
  for ($i = 0; $i < strlen($line); $i++) {
    $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 .= TABLE[base_convert(str_pad($b, 5, '0'), 2, 10)];
  }
  $base32 .= match (strlen($bits) % 40) {
    8 => '======',
    16 => '====',
    24 => '===',
    32 => '=',
    default => '',
  };
  echo $base32, PHP_EOL;
}

ランキング

ランク ID 作者 サイズ 投稿日時
1 #70 takaram 225 byte 2024-03-08 12:40:28
2 #62 nsfisis (staff) 235 byte 2024-03-08 05:25:41
3 #137 basi 250 byte 2024-03-09 04:27:40
4 #85 m3m0r7 262 byte 2024-03-08 14:57:05
5 #155 hanhan1978 275 byte 2024-03-09 15:19:33
6 #135 tadsan (staff) 276 byte 2024-03-09 04:24:05
7 #157 notchman 322 byte 2024-03-09 15:53:40
8 #52 yamamoto-hiroya 333 byte 2024-03-08 00:18:57
9 #127 azuki-penguin 355 byte 2024-03-09 03:21:55
10 #57 kunikiya 399 byte 2024-03-08 02:34:49
11 #42 rinchoku 447 byte 2024-03-07 23:59:24
12 #150 tsbkw 461 byte 2024-03-09 11:41:14
13 #2 blue-goheimochi (staff) 677 byte 2024-03-06 08:24:32
14 #3 muno92 (staff) 677 byte 2024-03-06 08:42:30
15 #140 masnmt 677 byte 2024-03-09 04:52:12
16 #141 k-kuwata 677 byte 2024-03-09 08:36:45
17 #151 ticknical 677 byte 2024-03-09 14:38:16

すべての回答を見る