Fibonacci One-Liner

Estoy tratando de resolver preguntas deProyecto Euler en Ruby one-liners, y tengo curiosidad por saber si hay una solución más elegante para pregunta dos:

Cada término nuevo en la secuencia de Fibonacci se genera al agregar los dos términos anteriores. Al comenzar con 1 y 2, los primeros 10 términos serán:

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

Considerando los términos en la secuencia de Fibonacci cuyos valores no exceden los cuatro millones, encuentre la suma de los términos de valor par.

Aquí está mi solución de una línea en Ruby:

(1..32).inject([0,1]) {|arr, i| (arr << arr[-1] + arr[-2] if arr[-1] + arr[-2] <= 4000000) || arr}.inject(0) {|total, i| total += i.even? ? i : 0}

Mi principal preocupación aquí es que estoy usando el rango (1..32) solo porque sé que eso es todo lo que es necesario hasta que los números en la secuencia de Fibonacci comiencen a exceder los 4,000,000. Preferiría que esto se integrara en la línea de alguna manera, pero no he podido resolverlo.

¡Los semicolones no están permitidos!

Respuestas a la pregunta(17)

Su respuesta a la pregunta