雑なプログラミング問題(LEET変換プログラム)
ネットで見かけたプログラミング問題をRubyで解いてみました。簡単なテストコードも作ったので、みなさんも是非解いてみてください。
問題
Leet - Wikipediaとは、一部のアルファベットを一定のルールに基づき、数値や記号に変換して表す遊び、仕組みです。 ここでは、以下の変換ルールが適用されています。
- a/A = 4
- b/B = 8
- e/E = 3
- l/L = 1
- o/O = 0
- s/S = 5
- t/T = 7
- z/Z = 2
例えば、文字列I am a student
はI 4m 4 57ud3n7
に置き換えられます。
変換対象の文字列:original_string
が与えられるので、それをleet文字列に変換した結果を返す関数leetifyを作成してください。
# 出力例 leetify('I am a student') # I 4m 4 57ud3n7 leetify('do re mi fa so ra si do') # d0 r3 mi f4 50 r4 5i d0 leetify('Dairantou smash brothers') # D4ir4n70u 5m45h 8r07h3r5
テストコード
回答
ハッシュテーブルを利用して変換します。
解説
すごい短いので解説することもないですが...
今回は文字列をString#chars
を利用して一文字ずつ配列に分解し、ハッシュテーブルを利用することで変換しています。
ハッシュテーブルに値がない場合は文字列そのままを返す必要があるのですが、これは短絡評価を利用することで短く表記しています。
3項演算子を使って書いてみると以下のような感じです。
def leetify(original_string) string.chars.map { |s| LEET_TABLE[s] ? LEET_TABLE[s] : s } end
ちなみに、すべてハッシュテーブルの中に値があることがわかっている場合は以下のように書けます。
def leetify(original_string) string.chars.map(&LEET_TABLE) end
この記法はHash#to_proc (Ruby 3.0.0 リファレンスマニュアル)を利用したものです。
おしまい