Ruby 可枚举中减少的限制?
Posted
技术标签:
【中文标题】Ruby 可枚举中减少的限制?【英文标题】:Limitation of reduce in Ruby enumberable? 【发布时间】: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 的所有数整除的最小偶正数是多少”? 【参考方案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
所以需要有另一个问题,或者是因为数字和运行时间变得非常大,直到你的循环终止。
【讨论】:
以上是关于Ruby 可枚举中减少的限制?的主要内容,如果未能解决你的问题,请参考以下文章