使用include时查找独特元素?

时间:2017-04-15 15:36:00

标签: ruby algorithm

我正在尝试创建游戏策划者。 setter代码数组是一个虚拟的颜色数组,每个游戏都会随机变化。玩家猜测也是虚拟元素来描绘我想要实现的目标。我的第一次迭代通过setter_code检查player_guess是否在同一位置具有相同的颜色。我的第二个迭代器通过玩家猜测并检查setter_code是否在数组中的任何位置包含该颜色。但是,我的问题是,正如你所看到的 - 当setter代码中有2个重复的颜色,但只有一个猜测迭代器会输出setter代码中有2个红色,因为它会发现红色两次它遍历猜测数组。我更改了迭代器以包含.uniq但后来意识到如果setter_code确实包含2个相同的颜色并且玩家猜测有2个相同的颜色,那么它实际上需要输出有2个匹配。有没有办法让我(就像我在第一次迭代中使用?和!)删除它首先匹配的红色,以便第二个红色看不到它?

setter_code = ["blue", "red", "blue", "orange"]
player_guess = ["red", "orange", "red", "yellow"]
result = []

setter_code.each_with_index do |color, i|
      if color == player_guess[i]
          result << "O"
          setter_code[i] = "?"
          player_guess[i] = "!"
      end
    end

    player_guess.each do |user_color|
      if setter_code.include? user_color
        result << "o"
      end
    end

2 个答案:

答案 0 :(得分:0)

您可以使用count功能,例如:
setter_code.count{ |x| x == user_color } == 1

答案 1 :(得分:0)

&#34;我的第二个迭代器通过玩家猜测并检查setter_code是否在数组中的任何位置包含该颜色&#34;

使用数组,您可以避免循环来检查它们的差异

 missed= setter_code - player_guess
 guessed = setter_code & player_guess