I’m trying to learn Ruby, and am going through some of the Project Euler problems. I solved problem number two as such:
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
While that works, it seems not very ruby-ish—I couldn’t come up with any good purely Ruby answer like I could with the first one ( puts (0..999).inject{ |sum, n| n%3==0||n%5==0 ? sum : sum+n }).
For a nice solution, why don’t you create a Fibonacci number generator, like
Primeor theTriangularexample I gave here.From this, you can use the nice
Enumerablemethods to handle the problem. You might want to wonder if there is any pattern to the even Fibonacci numbers too.Edit your question to post your solution…
Note: there are more efficient ways than enumerating them, but they require more math, won’t be as clear as this and would only shine if the 4 million was much higher.
As demas’ has posted a solution, here’s a cleaned up version: