CoffeeScriptでProject Euler #2

問題文

Problem 2

フィボナッチ数列の項は前の2つの項の和である。最初の2項を 1, 2 とすれば、最初の10項は以下の通りである。

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

数列の項の値が400万を超えない範囲で、偶数値の項の総和を求めよ。

Solution

sum = (list) -> list.reduce (a, b) -> a + b
odd ?= (num) -> num % 2 == 0
fib_tr = (n, b, a) ->
  if n == 0 then a else fib_tr(n - 1, b + a, b)
fib = (n) -> fib_tr(n, 1, 0)

max = 4000 * 1000
list = (fib n for n in [1..40] when (fib n) < max)
console.log sum list.filter (x) -> odd? x

fib 40 > 4000000と仮定してるあたりが美しくないんだががが

順路:CoffeeScriptでProject Euler #3
逆路:CoffeeScriptでProject Euler #1(カリー化の利用と解説試案)