Leet文字列(ruby編)
先に言っておくと、期待通りの出力ができなかったので分かる方教えて頂けると嬉しいです😭
問題
Leet ではいくつかのアルファベットをよく似た形の他の文字に置き換えて表記します。 Leet の置き換え規則はたくさんありますが、ここでは次の置き換え規則のみを考えましょう。
置き換え前 置き換え後
A 8
E 3
G 6
I 1
O 0
S 5
Z 2
文字列が入力されるので、これを Leet に変換して出力するプログラムを書いてください。
入力される値
入力は以下のフォーマットで与えられます。
i
i は Leet に変換する前の文字列を表します。
期待する出力
i を Leet に変換した文字列を1行に出力してください。
入力例1
APPLE
出力例1
8PPL3
私の答え(誤った答えです)
ruby
array = {
"A" => "8",
"E" => "3",
"G" => "6",
"I" => "1",
"O" => "0",
"S" => "5",
"Z" => "2"
}
str = gets.gsub(/[A-Z]/, array)
print str
悩んだポイント
今回のポイントは「アルファベットが当てはまったら該当のアルファベットのみ数字に置換する」という事でした。ですが、gsub(/[A-Z]/)でこのままのコードでは出力時に83のみ出力されてしまいます。(おそらく条件分岐でelseを用いて当てはまらなった部分を出力できていないから。)8PPL3と出力する際の正規表現なのかそもそものgsubメソッド以外に適したメソッドがあるのか分かりませんでした。ちなみに下記に条件分岐での手段も試してみましたがうまくいきませんでした。
str = gets.chomp.split(" ")
str.each { |s|
case s
when "A"
print "8"
when "E"
print "3"
・
・
・
(省略)
else
print s
}