我正在努力用我的代码来写一个简单的代码破解游戏。有一个隐藏的代码:
code = ["a","b","b","c"]我的程序要求用户输入,然后将其存储在一个变量中。我想将用户输入与密码变量进行比较,并给出用户反馈:1表示正确的字母位于正确的位置,0表示正确的字母位于错误的位置,"-“表示错误的字母。
我想出了这样的东西:
feedback = []
input.each_with_index do |v,i|
if v == code.fetch(i)
feedback << "1"
else
feedback << "-"
end
end当它比较相同索引处的元素时,它工作正常。我不知道如何找到代码数组中的元素,但不在同一索引中,并向用户提供反馈。
例如:
code = ["a","b","b","c"]
input = ["b","b","a","z"]
feedback = ["0","1","0","-"]发布于 2017-02-01 01:21:22
这段代码适用于你提到的3个例子。
使用2次传递是因为必须在返回0s之前返回1s:
def give_feedback(input, code)
feedback = Array.new(input.size) { '-' }
code2 = code.dup
input.each_with_index do |letter, index|
if letter == code[index]
feedback[index] = '1'
code2[index] = nil
end
end
input.each_with_index do |letter, index|
next if feedback[index] == '1'
found = code2.index(letter)
if found
feedback[index] = '0'
code2[found] = nil
end
end
feedback
end
p give_feedback(%w(b b a z), %w(a b b c))
# ["0", "1", "0", "-"]
p give_feedback(%w(a a a a), %w(a b b c))
# ["1", "-", "-", "-"]
p give_feedback(%w(c c b a), %w(a b b c))
# ["0", "-", "1", "0"]发布于 2017-02-01 00:59:36
可以使用include?方法查看该字符是否在列表中的不同索引处。如下所示:
input.each_with_index do |v,i|
if v == code.fetch(i)
feedback << "1"
elsif code.include?(v)
# right character, wrong spot
feedback << "0"
else
feedback << "-"
end
end发布于 2017-02-01 01:08:44
另一个解决方案
code = ["a","b","b","c"]
input = ["b","b","a","z"]
feedback = input.map.with_index do |num, ind|
if code.include? num
code[ind] == num ? '1' : '0'
else
'-'
end
end
=> ['0', '1', '0', '-']如果您想在前面定义feedback,只需将第一个变体编辑为:
code = ["a","b","b","c"]
input = ["b","b","a","z"]
feedback = []
input.each_with_index do |num, ind|
if code.include? num
feedback << (code[ind] == num ? '1' : '0')
else
feedback << '-'
end
end结果会是一样的
https://stackoverflow.com/questions/41963043
复制相似问题