私はこのプログラムを書いて名前を取り、姓と名を逆にし、文字を1つ上に移動しました。私がそれを走らせると、それはうまくいきますが、最後には各名前の別名を別名で吐き出します。彼らは指数関数的に見えますが、3つのエイリアスがあれば9つの結果が得られます。私を助けてください。ルビーが初めて。私に混合結果を与えるRuby暗号化プログラム
@aliases = []
@real = []
def alias_machine(name)
@real << name
name = name.downcase
name_array = name.split(' ')
first_name = name_array[1]
first_name_split = first_name.split('')
last_name = name_array[0]
new_namearray1 = first_name_split.map do |y|
vowels = ["a", "e", "i", "o", "u"]
if y == vowels[0]
y = "e"
elsif y == vowels[1]
y = "i"
elsif y == vowels[2]
y = "o"
elsif y == vowels[3]
y = "u"
elsif y == vowels[4]
y = "a"
elsif y.next == "aa"
y = "b"
elsif y.next == vowels[1]
y = y.next.next
elsif y.next == vowels[2]
y = y.next.next
elsif y.next == vowels[3]
y = y.next.next
elsif y.next == vowels[4]
y = y.next.next
else
y = y.next
end
end
last_name_split = last_name.split('')
new_namearray2 = last_name_split.map do |y|
vowels = ["a", "e", "i", "o", "u"]
if y == vowels[0]
y = "e"
elsif y == vowels[1]
y = "i"
elsif y == vowels[2]
y = "o"
elsif y == vowels[3]
y = "u"
elsif y == vowels[4]
y = "a"
elsif y.next == "aa"
y = "b"
elsif y.next == vowels[1]
y = y.next.next
elsif y == vowels[2]
y.next.next
elsif y.next == vowels[3]
y = y.next.next
elsif y.next == vowels[4]
y= y.next.next
else
y = y.next
end
end
new_namearray1 = new_namearray1.join('')
new_namearray1 = new_namearray1 + " "
new_namearray1 = new_namearray1.capitalize
new_namearray2 = new_namearray2.join
new_namearray2 = new_namearray2.capitalize
lastarray = []
lastarray[0] = new_namearray1
lastarray[1] = new_namearray2
lastarray = lastarray.join
@aliases << lastarray
end
loop do
p "Give us a name"
names = gets.chomp
if names == "Quit"
p "Thanks!"
@aliases.each do |aliases|
@real.each do |real|
p "#{aliases} is actually #{real}"
end
end
break
else
alias_machine(names)
end
end
あなたが使用する必要があります:あなたは、このコマンドを使用してペア保存することができます:
をして、もう一度それを読んで。 1/String.html#method-i-tr)を使用して文字を置き換えます。 'first_name.tr(' a-z '、' ecdfighjoklmnpuqrstvawxyzb ')' – Stefan
@Stefan 'tr'は*正確に*ここで使用するツールです。このコードは実際には長くて紛らわしく、最終的にはそれを試して再実装するだけです。 – tadman
少なくとも、if文の長い鎖の代わりに、['case']を使ってみてください(https://ruby-doc.org/core-2.3.1/doc/syntax/control_expressions_rdoc.html#ラベルケース+式)、またはハッシュ構造を使用するルックアップテーブル。また、 'n2 = n2.join.capitalize'や' c = [a、b] .join'のようなものを連鎖させることができます。 – tadman