gpt4 book ai didi

Ruby 整数比较给出了错误的结果

转载 作者:行者123 更新时间:2023-12-02 01:26:48 26 4
gpt4 key购买 nike

当我编写以下代码时,我希望最后几行给出 false 和零结果。你能帮我理解为什么会这样吗?

id=408983265
a = id.to_s.each_char.map(&:to_i)
valid_digit = a.reverse
.drop(1)
.map!.with_index { |x, i| x << (i + 1) }
.sum % 11 % 10

puts "valid digit: #{valid_digit}" # valid digit: 5
puts "last digit: #{a.pop}" # last digit: 5

# the problem starts here
puts valid_digit != a.pop # true ??? It should be 5!=5 -> false
puts valid_digit - a.pop # 3 ??? It should be zero!

最佳答案

如评论中所述,您的问题来自使用您不需要的可变方法(#map!#pop),从而导致意外行为。

作为一个建议,您可以大大简化您的代码:

id.to_s.each_char.map(&:to_i)

和写一样:

id.digits.reverse

由于您的下一步无论如何都会反转该数字数组,因此没有必要反转两次。

valid_digit = id.digits.drop(1)
.map.with_index { |x, i| x << (i + 1) }
.sum % 11 % 10

或者,如果我们将 .drop(1) 替换为 [1..] 并使用 #reduce,则可以生成总和一次通过。

valid_digit = id.digits[1..]
.reduce([0, 1]) { |(sum, idx), x|
n = x << idx
[sum + n, idx + 1]
}[0] % 11 % 10

关于Ruby 整数比较给出了错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74381269/

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