gpt4 book ai didi

ruby - 更多 ruby​​ 项目 euler #2 的方式

转载 作者:数据小太阳 更新时间:2023-10-29 07:24:18 26 4
gpt4 key购买 nike

我正在尝试学习 Ruby,并且正在解决一些 Project Euler 问题。我解决了problem number two因此:

def fib(n)
return n if n < 2
vals = [0, 1]
n.times do
vals.push(vals[-1]+vals[-2])
end
return vals.last
end
i = 1
s = 0
while((v = fib(i)) < 4_000_000)
s+=v if v%2==0
i+=1
end
puts s

虽然这行得通,但似乎不是很像 Ruby - 我无法像第一个那样想出任何好的纯 Ruby 答案(puts (0..999).inject{ |sum , n| n%3==0||n%5==0 ? 总和:总和+n )。

最佳答案

为了一个好的解决方案,为什么不创建一个斐波那契数生成器,例如 PrimeTriangular 示例 I gave here .

由此,您可以使用漂亮的 Enumerable 方法来处理该问题。您可能想知道偶数斐波那契数是否也有任何模式。

编辑您的问题以发布您的解决方案...

注意:有比枚举它们更有效的方法,但它们需要更多的数学运算,不会像这那么清楚,只有在 400 万更高的情况下才会发光。

由于 demas 发布了一个解决方案,这里是一个清理过的版本:

class Fibo
class << self
include Enumerable

def each
return to_enum unless block_given?
a = 0; b = 1
loop do
a, b = b, a + b
yield a
end
end
end
end

puts Fibo.take_while { |i| i < 4000000 }.
select(&:even?).
inject(:+)

关于ruby - 更多 ruby​​ 项目 euler #2 的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3029392/

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