我正在努力使用我的代码编写一个简单的代码破解游戏。 有一个隐藏的代码:
UnknownHostException
我的程序要求输入用户,然后将其存储在变量中。 我想将用户输入与密码变量进行比较并给出用户反馈:1表示好的字母,0表示错误的字母,“ - ”表示错误的字母。
我想出了类似的东西:
code = ["a","b","b","c"]
在比较同一索引处的元素时,它可以正常工作。我不知道如何找到代码数组中的元素,但不能在同一索引中找到并向用户提供反馈。
例如:
feedback = []
input.each_with_index do |v,i|
if v == code.fetch(i)
feedback << "1"
else
feedback << "-"
end
end
答案 0 :(得分:1)
此代码适用于您提到的3个示例。
使用了2次传递,因为必须在1
之前返回0
:
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"]
答案 1 :(得分:0)
您可以使用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
答案 2 :(得分:0)
还有一个解决方案
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
结果将是相同的
答案 3 :(得分:0)
您可以使用zip
和map
使其更具功能性。 include?
会检查输入是否在code
code = %w(a b b c)
input = %w(b b a z)
result = code.zip(input).map do |c, i|
if c == i
'1'
elsif code.include?(i)
'0'
else
'-'
end
end
puts result.to_s
答案 4 :(得分:0)
出于好奇:
[code, input].map { |a| (0...a.size).zip(a).to_h }
.reduce do |e, acc|
c = acc.values.dup
acc.merge(e) do |_, v1, v2|
case (c.delete_at(c.index(v2)) rescue nil)
when v1 then "1"
when nil then "-"
else "0"
end
end
end.values