0
0

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 3 years have passed since last update.

Leet文字列(ruby編)

Posted at

#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
}

#この問題の8PPL3という出力結果にする方法は様々あると思いますが当てはまったら部分的に置換するという方法がこれ以上できませんでした。もし分かる方、お優しい方がいらっしゃいましたらご教授頂けますと幸いです。
#以上

0
0
2

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?