Кажется, еще нет конкурса на этот.
Задача проста. Добавьте первые n
числа последовательности Фибоначчи, которые являются четными, и выведите результат.
Это дается OEIS A099919 , за исключением того, что последовательность смещена на единицу, начиная с fib(1) = 0
вместо fib(1) = 1
.
Это код гольф. Побеждает младший счетчик байтов.
Примеры
n sum
1 0
2 2
3 10
4 44
5 188
6 798
7 3382
8 14328
9 60696
code-golf
number-theory
fibonacci
dfernan
источник
источник
Ответы:
Оазис ,
875 байт1 байт сохранен благодаря @ETHProductions и еще 2 сохранены благодаря @ Adnan!
Попробуйте онлайн!
Объяснение:
При этом используется та же формула повторения, что и в моем ответе на MATL.
источник
U
что в коде заменяется00
, может ли это сэкономить вам байт?4*
наz
и2+
с»
:)Python, 33 байта
Попробуйте онлайн
Волшебная формула!
источник
a(n) = (-10 + (5-3*sqrt(5))*(2-sqrt(5))^n + (2+sqrt(5))^n*(5+3*sqrt(5)))/20
(Колин Баркер, 26 ноября 2016 г.) со страницы OEISPython 2 , 35 байт
Попробуйте онлайн!
источник
На самом деле , 6 байтов
Попробуйте онлайн!
Объяснение:
Каждое третье число Фибоначчи (начиная с
F_0 = 0
) является четным. Таким образом, первыеn
четные числа ФибоначчиF_{i*3}
дляi
в[0, n)
.источник
JavaScript (ES6), 27 байт
Рекурс на помощь! Это использует одну из формул на странице OEIS:
(но сдвинут на единицу, потому что вызов сдвигает на единицу)
источник
Пайк, 6 байт
Попробуй это здесь!
источник
Perl 6 ,
38 3532 байтаПопытайся
Попытайся
Попытайся
Expanded:
источник
Октава ,
363533 байтаПопробуйте онлайн!
объяснение
Эта анонимная функция реализует разностное уравнение
a(n) = 4*a(n-1)+a(n-2)+2
в виде рекурсивного фильтра :В нашем случае
A = [1 -4 -1]
,B = 2
и входx
должен быть вектором с результатом, появляющимся как последняя запись результатаy
. Тем не менее, мы устанавливаем0
первое значение входного значения, чтобы начальное значение0
отображалось в выходных данных, как требуется.'FAD'-69
это просто более короткий способ получения вектора коэффициентаA = [1 -4 -1]
; и(1:n)>1
производит входной векторx = [0 1 1 ... 1]
.источник
постоянный ток ,
2522 байтаПопробуйте онлайн!
Или сохраните программу в файл и запустите ее, набрав
Программа принимает неотрицательное целое число n в stdin и выводит сумму первых n четных чисел Фибоначчи в stdout. (Последовательность Фибоначчи начинается с 0, как в примерах ОП.)
Эта программа использует формулу (F (3n-1) -1) / 2 для суммы первых n четных чисел Фибоначчи, где F - обычная функция Фибоначчи, определяемая как F (0) = 0, F (1) = 1, F (n) = F (n-2) + F (n-1) для n> = 2.
dc - это стековый калькулятор. Вот подробное объяснение:
На данный момент число (1 + sqrt (5)) / 2 находится на вершине стека.
В этот момент 3n-1 находится на вершине стека (где n - вход), а (1 + sqrt (5)) / 2 - второй сверху.
На данный момент число в верхней части стека составляет (((1 + sqrt (5)) / 2) ^ (3n-1)) / sqrt (5). Ближайшим целым числом к этому числу является F (3n-1). Обратите внимание, что F (3n-1) всегда нечетное число.
источник
Mathematica,
2721 байтСпасибо xnor за указание на альтернативную формулу, alephalpha за исправление для начального индекса
источник
(Fibonacci(3*n+2)-1)/2
формула быть короче?MATL ,
1514 байтовПопробуйте онлайн!
объяснение
Это использует одну из формул повторения от OEIS:
Для ввода N код повторяется N раз, что в 2 раза больше, чем необходимо. Это компенсируется за счет установки
0
,0
(вместо того , чтобы0
,2
) в качестве начальных значений, а также путем удаления последнего полученного значения и отображение предыдущего.источник
Пакетная, 80 байтов
Использует тот факт, что каждое третье число Фибоначчи является четным, и просто вычисляет их по три за один раз (вычисление более чем одного за раз на самом деле проще, поскольку вам не нужно менять значения вокруг). Я попробовал
(Fibonacci(3*n+2)-1)/2
формулировку, но на самом деле она на несколько байт длиннее (t+=
оказывается, довольно эффективно с точки зрения размера кода).источник
С
823836 байт2 байта сохранены благодаря @BrainSteel
Формулы на странице OEIS сделали его намного короче:
Попробуйте онлайн!
82 байта:
Первая версия имеет размер 75 байт, но функция не может использоваться повторно, если только вы не вызываете
f
больше,N
чем предыдущий вызов :-)Мой первый ответ здесь. Не проверял ни другие ответы, ни OEIS. Я предполагаю, что есть несколько уловок, которые я могу применить, чтобы сделать это короче :-)
источник
a(n){return--n<1?0:4*a(n)+a(n-1)+2;}
(36 байт)Haskell (
3231 байт)Сохранено один байт благодаря @ChristianSievers.
Используя формулу, приведенную в OEIS:
a(n) = 4*a(n-1)+a(n-2)+2, n>1
Гэри Детлефсa n|n>1=4*a(n-1)+a(n-2)+2|n<2=0
источник
n<=1
для целых чиселn<2
. Кроме того, второе условие не обязательно должно быть отрицанием первого (идиоматикаotherwise
простоTrue
), поэтому обычно в гольфе используется нечто подобное1<2
.Mathematica,
3227 байтКредит XNOR . Сохранено 5 байтов благодаря JungHwan Мин.
источник
(Fibonacci(3*n+2) - 1)/2
написать или записать суми?(* Vincenzo Librandi, Mar 15 2014 *)
в пост, как это делается в OEIS.)R, 42 байта
Нерекурсивное решение, в отличие от более раннего решения @rtrunbull здесь .
Использует свойство, которое каждое третье значение последовательности Фибоначчи является четным. Также злоупотребляет тем, что
F
по умолчанию определено какFALSE=0
, что позволяет ему добавлять значения в качестве основы.источник
R
42 42байтаРанее у меня было это неинтересное решение с использованием одной из формул OEIS:
источник
desctools::fibonacci
это не можетnumbers::fibonacci
? Потому что этот туман будет немного короче.bigz
, которые*apply
класс функций преобразует в тип поraw
причинам ...Japt , 10 байт
Попробуйте онлайн!
Спасибо ETHproductions :)
источник
PHP,
7370 байтдемонстрация переменных переменных . На). Беги с
-nr
.сломать
Числа являются абсолютно допустимыми именами переменных в PHP.
Но для литералов они требуют скобок; т.е.
${0}
нет$0
.36 байтов, O (1)
порт ответа xnor
источник
PARI / GP, 21 байт
\
является целочисленным частным.источник