Fibonacci One-Liner

Я пытаюсь решить вопросы из ] Проект Эйлер i n однострочники Ruby, и мне любопытно, есть ли более элегантное решение для вопроса два :

Каждый новый член в последовательности Фибоначчи генерируется путем добавления двух предыдущих членов. Начиная с 1 и 2, первые 10 членов будут:

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

Рассматривая члены в Фибоначчи последовательность, значения которой не превышают четырех миллионов, найдите сумму четных членов.

Вот мое однострочное решение на 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}

Меня больше всего беспокоит то, что я использую диапазон (1 .. 32) только потому, что я знаю, что это все, что нужно, пока числа в последовательности Фибоначчи не начнут превышать 4 000 000. Я бы предпочел, чтобы это было каким-то образом встроено в однострочную строку, но я не смог это понять.

Точки с запятой не разрешены!

21
задан tobias_k 22 January 2015 в 10:54
поделиться