9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Leet 文字列を力技で作った後 str_replace に気づいた話

Posted at

フリー百科事典『ウィキペディア(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

力技で解いた

leet1.php
<?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 には配列を渡せた

leet2.php
<?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 のカスタムテストで計測した範囲では、メモリや実行時間には大きな差がなかったため、内部的な実装はあまり変わらないのかもしれません。

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?