フリー百科事典『ウィキペディア(Wikipedia)』 > Leet
leet(リート、1337、l33t)は、主に英語圏においてインターネット上で使われるアルファベットの表記法である。leetspeak(リートスピーク)とも呼ばれる。
leet は、英語の elite(エリート)が eleet に変化し、さらに語頭の e がとれてできた俗語である。日本ではハッカー語と呼ばれることもある。
たとえば、「Warez」という語を leet で表記すると、「W@rez」や「W4r3z」などとなるように、一部のアルファベットを形の似た数字や記号などに変化させる。
知らなかったので検索しましたが、こういう文字列のことは Leet と呼ぶそうで。
今回、入力文字列を Leet 変換したいシーンがあり、それを若干の力技で解決した後、もっと楽な方法に気づいた脱力感を記事にします。
(PHP 便利な関数多すぎて、存在を認識しないまま作っちゃうことがよくある反省)
お題
入力文字列のアルファベットを以下のルールで変換して標準出力。
入力値の読み込みは 標準入力から読み込むコード を使います。
入力文字 | 変換後文字 |
---|---|
O | 0 |
I | 1 |
Z | 2 |
E | 3 |
A | 4 |
S | 5 |
G | 6 |
T | 7 |
B | 8 |
P | 9 |
力技で解いた
<?php
$leets = [
'O' => '0',
'I' => '1',
'Z' => '2',
'E' => '3',
'A' => '4',
'S' => '5',
'G' => '6',
'T' => '7',
'B' => '8',
'P' => '9',
];
$s = trim(fgets(STDIN));
foreach ($leets as $src => $dest) {
$s = str_replace($src, $dest, $s);
}
echo $s . PHP_EOL;
str_replace には配列を渡せた
<?php
$src = ['O', 'I', 'Z', 'E', 'A', 'S', 'G', 'T', 'B', 'P'];
$dest = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
$s = trim(fgets(STDIN));
echo str_replace($src, $dest, $s) . PHP_EOL;
AtCoder のカスタムテストで計測した範囲では、メモリや実行時間には大きな差がなかったため、内部的な実装はあまり変わらないのかもしれません。