【问题标题】:Limitation of reduce in Ruby enumberable?Ruby 可枚举中减少的限制?
【发布时间】:2015-06-16 20:10:18
【问题描述】:

我正在尝试解决 Project Euler 的问题 5。我正在使用 .reduce(:+) 方法,它似乎适用于最长 16 长的数组。然后,当我尝试为答案传递任何更大的值 (20) 时,它永远不会计算我的最终值。

require 'pp'
pp factors = (1..20).to_a
n = 1

result = []
loop do
  factors.each { |x| result << n % x }
  if result.reduce(:+) == 0
        break
  else
        result = []
  end
  n += 1
end
pp n

【问题讨论】:

  • 能不能给我们讲讲欧拉项目的问题5?
  • 问题是“能被 1 到 20 的所有数整除的最小偶正数是多少”?

标签: ruby enumerable


【解决方案1】:

原来你可以用 Integer#lcm 解决这个问题。是的。也在一行中。

(1..20).to_a.reduce(:lcm)

【讨论】:

  • 建议更好的方法很有帮助,但只有在您或其他人回答了 OP 的问题之后。
【解决方案2】:

我用 array.inject(:+) 并且永远不会遇到数组长度的任何问题。将对欧拉的其余部分非常有帮助!它也可以直接作用于范围,因此您无需调用 .to_a:

(1..20).inject(:+) --> 210

http://ruby-doc.org/core-2.2.1/Enumerable.html

【讨论】:

    【解决方案3】:

    对于标题的问题,reduce有没有限制?

    没有直接限制,它仅受阵列所需的计算机内存量的限制。正常整数溢出时会自动使用 BigNum 类。

    例如,

     (1..10000000).to_a.reduce(:+)
    => 50000005000000
    50000005000000.class
    => Bignum
    

    所以需要有另一个问题,或者是因为数字和运行时间变得非常大,直到你的循环终止。

    【讨论】:

      猜你喜欢
      • 2020-06-27
      • 2017-06-19
      • 1970-01-01
      • 2021-01-02
      • 2013-05-18
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多