Я пытаюсь решить вопросы из Project Euler в однострочном пространстве 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. Я бы предпочел, чтобы это было встроено в одну строку, но я не смог понять это.
Полуколоны не допускаются!