Ruby加密程序给我的结果好坏参半

时间:2016-09-26 06:07:13

标签: 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 个答案:

答案 0 :(得分:1)

对于每个名称,您将实名和别名附加到每个相应的变量。当程序退出时,您将迭代两者的组合。因此,你得到了指数结果。

@aliases.each do |aliases|
  @real.each do |real|
    p "#{aliases} is actually #{real}"
  end
end

您可能只想要一个带数组的变量。您可以使用以下命令存储货币对:

@aliases << [name, lastarray]

再次阅读:

@aliases.each do |name, alias_name|
  p "#{alias_name} is actually #{name}" 
end
相关问题