ikuma-t.

検索

雑なプログラミング問題(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 studentI 4m 4 57ud3n7に置き換えられます。
変換対象の文字列:original_stringが与えられるので、それをleet文字列に変換した結果を返す関数leetifyを作成してください。

# 出力例leetify('I am a student') # I 4m 4 57ud3n7leetify('do re mi fa so ra si do') # d0 r3 mi f4 50 r4 5i d0leetify('Dairantou smash brothers') # D4ir4n70u 5m45h 8r07h3r5

テストコード

gist.github.com🔗

回答

ハッシュテーブルを利用して変換します。

gist.github.com🔗

解説

すごい短いので解説することもないですが…

今回は文字列をString#charsを利用して一文字ずつ配列に分解し、ハッシュテーブルを利用することで変換しています。
ハッシュテーブルに値がない場合は文字列そのままを返す必要があるのですが、これは短絡評価を利用することで短く表記しています。

3項$1を使って書いてみると以下のような感じです。

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 リファレンスマニュアル)🔗を利用したものです。


おしまい

ikuma-t

ikuma-t

ABOUT

9割笑顔、1割 (´・ω・) なエンジニア