gpt4 book ai didi

ruby - 检查两个数组中相似元素的索引是否不同

转载 作者:行者123 更新时间:2023-12-05 05:33:25 25 4
gpt4 key购买 nike

这是我在 StackOverFlow 上的第一个问题!如果我的问题不清楚,请告诉我。

这是我目前所拥有的:

code = ["4", "4", "1", "1"]
guess = ["4", "4", "4", "1"]

@A = 0
@B = 0

code.each_with_index do |item, index|
if item == guess[index]
@A += 1
elsif code.include?(guess[index])
@B += 1
end
print "\nA:#{@A} B:#{@B}"
end

如果一个数字在两个数组中并且在同一位置(索引),我想将@A 增加 1。如果数字在两个数组中但在不同的位置(索引),则将@B 增加 1。

我应该得到 A:3 B:0,但我得到的是 A:3 B:1。在代码数组中,没有第三个“4”,所以 B 不应该增加 1。

是不是因为.include?不适用于数组中的重复项?我该如何解决这个问题?

最佳答案

在代码和猜测之间每次成功(个别)匹配后,我们必须从等式中删除匹配的元素。

例如,code = ['1', 2']guess = ['1', '1']。我们在索引 0 处获得完全匹配。如果我们删除匹配的元素:code = ['2']guess = ['1'],我们可以清楚地看到没有进一步的匹配。

如果我们没有删除元素,那么(除了完全匹配之外)code 的索引 0 将与 guess 的索引 1 匹配...这将错误地导致 @A = 1@B = 1。我们不想使用已经匹配的代码元素来匹配不同的猜测元素。

code = ["4", "4", "1", "1"]
guess = ["4", "4", "4", "1"]

unmatched_code = []
unmatched_guess = []

@A = 0
@B = 0

code.size.times do |i|
if code[i] == guess[i]
@A += 1
else
unmatched_code << code[i]
unmatched_guess << guess[i]
end
end

unmatched_guess.each do |g|
matched_at_index = unmatched_code.index(g)
if matched_at_index
@B += 1
unmatched_code.delete_at(matched_at_index)
end
end

关于ruby - 检查两个数组中相似元素的索引是否不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73863157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com