#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
#私の答え(誤った答えです)
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
}
#この問題の8PPL3という出力結果にする方法は様々あると思いますが当てはまったら部分的に置換するという方法がこれ以上できませんでした。もし分かる方、お優しい方がいらっしゃいましたらご教授頂けますと幸いです。
#以上