如果没有重复的数字,我们可以使用数组交集:
def triple?(winning_numbers, my_number)
my_number_arr = my_number.chars
winning_numbers.any? { |(w)| w.chars & my_number_arr).size == 3 }
end
winning_numbers = [["2537"], ["1294"], ["5142"]]
my_number = "1234"
triple?(winning_numbers, my_number) #=> true, matches "1294"
或者,我们可以写而不是w.chars & my_number_arr).size == 3
(w.chars - my_number_arr).size == 1 # (4-3=1)
但是,当字符串有重复的数字时,这不起作用,这当然必须考虑在内。
我have proposed 建议采用Array#difference 方法作为Ruby 核心方法。这将是完美的解决这个问题。有关其用途的示例,请参阅我在 Array#difference 的回答。
def triple?(winning_numbers, my_number)
my_number_arr = my_number.chars
winning_numbers.any? { |(w)| puts my_number_arr.difference(w.chars).size == 1 }
end
winning_numbers = [["2537"], ["1294"], ["5142"]]
my_number = "1234"
triple?(winning_numbers, my_number) #=> true, matches "1294"
另一个包含重复数字的例子:
winning_numbers = [["1551"], ["1594"], ["1141"]]
triple?(winning_numbers, my_number) # matches "1141"
还有一个三位数不匹配的例子:
winning_numbers = [["1551"], ["1594"], ["1561"]]
triple?(winning_numbers, my_number) #=> false (no match)