首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何收集用户输入并提供反馈

如何收集用户输入并提供反馈
EN

Stack Overflow用户
提问于 2017-02-01 00:51:09
回答 5查看 87关注 0票数 1

我正在努力用我的代码来写一个简单的代码破解游戏。有一个隐藏的代码:

代码语言:javascript
复制
code = ["a","b","b","c"]

我的程序要求用户输入,然后将其存储在一个变量中。我想将用户输入与密码变量进行比较,并给出用户反馈:1表示正确的字母位于正确的位置,0表示正确的字母位于错误的位置,"-“表示错误的字母。

我想出了这样的东西:

代码语言:javascript
复制
feedback = []
input.each_with_index do |v,i|
  if v == code.fetch(i)
    feedback << "1"
  else
    feedback << "-"
  end
end

当它比较相同索引处的元素时,它工作正常。我不知道如何找到代码数组中的元素,但不在同一索引中,并向用户提供反馈。

例如:

代码语言:javascript
复制
code = ["a","b","b","c"]
input = ["b","b","a","z"]
feedback = ["0","1","0","-"]
EN

回答 5

Stack Overflow用户

发布于 2017-02-01 01:21:22

这段代码适用于你提到的3个例子。

使用2次传递是因为必须在返回0s之前返回1s:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2017-02-01 00:59:36

可以使用include?方法查看该字符是否在列表中的不同索引处。如下所示:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2017-02-01 01:08:44

另一个解决方案

代码语言:javascript
复制
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,只需将第一个变体编辑为:

代码语言:javascript
复制
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

结果会是一样的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41963043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档