В чередующейся последовательности Фибоначчи вы начинаете с 1
и 1
как обычно.
Однако вместо того, чтобы всегда добавлять последние два значения, чтобы получить следующее число, вы чередуетесь, начиная с добавления, и каждый раз вместо этого вычитаете.
Последовательность начинается так:
1
1
2 # 1 + 1
-1 # 1 - 2
1 # 2 + -1
-2 # -1 - 1
-1 # 1 + -2
-1 # -2 - -1
-2 # -1 + -1
1 # -1 - -2
-1 # -2 + 1
2 # 1 - -1
1 # -1 + 2
1 # 2 - 1
и т.п.
Обратите внимание, что после того, как он начинается снова, когда он добирается до 1
и 1
снова.
Задав число N , выведите N- й член чередующейся последовательности Фибоначчи.
Помните, что это код-гольф , поэтому выигрывает код с наименьшим количеством байтов.
true
за1
?1
значения считаются начальными значениями для выхода? Или мы начнем непосредственно с2
?Ответы:
JavaScript (ES6), 25 байт
0 индексированные. Вы можете сократить строку с немного рекурсивной версией, хотя она добавляет 6 байтов:
Это все еще короче, чем окончательная рекурсивная формула:
источник
Python, 31 байт
Не надо пытаться вычислить значение. Просто просматривает список peroidic length-12
[1, 1, 2, -1, 1, -2, -1, -1, -2, 1, -1, 2]
, который сжат в базе 5.Сравните с рекурсивным решением (37 байт) с
True
s для 1:или для хранения строки
или попытка арифметического выражения.
источник
Оазис , 10 байт
Напоминает мне реализовать еще несколько встроенных функций: с. Вход 0 проиндексирован .
Код:
Переведенная версия:
И вычисляет n- й член.
Попробуйте онлайн!
источник
05AB1E , 10 байтов
Использует кодировку CP-1252 . Попробуйте онлайн!
источник
Pyth - 13 байт
База закодирована один раз за цикл, модульно проиндексирована.
Попробуйте это онлайн здесь .
источник
Желе, 12 байт
TryItOnline!
На основе 1, учитывая первое и второе значения
1
.Не уверен, что это еще короче, но для этого я отметил, что серия имеет период 12:
[1, 1, 2, -1, 1, -2, -1, -1, -2, 1, -1, 2]
Итак, я взял это и добавил,
2
чтобы дать, а[3, 3, 4, 1, 3, 0, 1, 1, 0, 3, 1, 4]
затем преобразовал это как базовое
5
число в базу250
, чтобы дать:[11, 197, 140, 84]
(что есть
184222584
).источник
Haskell,
3326 байтовРекурсивный подход. 0 индексированные. Попробуйте это на Ideone.
Сохранено 7 байтов благодаря xnor .
Использование:
источник
a!b=a:b:(a+b)!(-a)
.Mathematica, 40 байт
Просто создает таблицу поиска и циклически обращается к ней, как в ответе ETHproductions. Безымянная функция, 1-индексированная.
источник
MATL ,
171615 байтВход основан на 1.
Попробуйте онлайн!
объяснение
Последовательность имеет период
[1 1 2 -1 1 -2 -1 -1 -2 1 -1 2]
.источник
WinDbg, 26 байт
Ввод передается через псевдорегистр
$t0
. 0 индексированные. +2 каждого члена в последовательности хранится в 3-х битном порядке85824331b
.Как это устроено:
Пример вывода, цикл печати первых 14 значений последовательности:
источник
Java, 32 байта
Поскольку это Java, ответ 0-индексирован.
Тестирование и разгула
Тест на идеоне
источник
Mathematica,
454138 байтСпасибо @MartinEnder за 3 байта.
0 индексированные.
использование
источник
±
вместо функцииa
.Perl 6 ,
39 3532 байтаисточник
C #, 117 байт
Golfed:
Ungolfed:
Тестирование:
источник
public int A(int n)
что теперьn=>
вы можете удалить фигурные скобки вокруг оператора for, сохраняя 2 байта, вы можете предварительно увеличитьi
цикл in, т.е.++i <= n
установитьi = 2
3 байта сохранения, потому что он удаляетi++
в конце оператораR, 38 байт
Использует решение таблицы поиска, основанное на ответе @ETHproductions JS.
Изменить: Забыл упомянуть, что это 1-индексированный.
источник
На самом деле , 22 байта
Попробуйте онлайн!
Объяснение:
источник
Java 7,
888279 байтgolfed:
ungolfed:
Попробуйте онлайн
источник
int
тип возвращаемого значения. 2. Вы можете сэкономить байты, переместив присвоение 0 в объявление i:int c,i=0
иfor(;i<n;){
. 3. Вы можете удалить круглые скобки вокруг условия троичного оператора.DC, 55 байтов
0 индексированные.
Регистр d хранит индекс значения. Регистр n считает количество выполненных итераций. Регистр r хранит основной макрос. Регистр y сохраняет более позднее значение в последовательности, в то время как стек содержит более раннее значение в последовательности.
Визуальное объяснение того, что происходит в большом цикле (при условии добавления):
Проверка, чтобы определить, прибавлять или вычитать, берет счетчик по модулю два и использует этот трюк для создания конструкции if if else.
В конце стопка содержит одно число, желаемое значение, которое печатается с
p
.(Я новичок
dc
, поэтому я ожидаю, что здесь будут сделаны некоторые очевидные улучшения.)источник
ForceLang , 153 байта
источник
Turtlèd , 35 байт
0 проиндексировано
Объяснение:
Попробуйте онлайн!
источник
ABCR, 43 байта
Объяснение: first part (
)AAB)ABB..A))A..A)AA(ABB.)A+A)))A
) устанавливает очередь A для хранения [1, 1, 2, -1, 1, -2, -1, -1, -2, 1, -1, 2], оставляя все остальные очереди пустыми ,iB
сохраняет наш желаемый термин, и цикл5aAb(Bx
циклически перебирает очередь много раз.o
печатает начало очереди в виде числа, которое затем будет нашим желаемым ответом.источник
Пакетный, 49 байтов
Принимает ввод в качестве параметра командной строки. Пояснение: Закрытая форма использует следующие наблюдения:
Поэтому мы начнем с уменьшения по модулю 12 (чтобы сохранить 2 байта). Затем мы уменьшаем по модулю три и инвертируем результат, который равен 1 для кратных 3 или 0 в противном случае. Затем мы побитно не то значение, что дает нам -2 для кратных 3 или -1 в противном случае. Затем мы уменьшаем модуль 5 и отдельно делим на 4, давая ноль для слагаемых 1, 2, 3, 5, 10 и 12 (0). Инвертирование и отрицание дают нам -1 для этих значений и ноль для других значений. Затем мы побитно или что с 1 и умножаем с более ранним вычислением.
источник
TI-Basic, 26 байтов
К сожалению, очень неинтересный подход. Я не мог найти ничего короче. Список 1 проиндексирован.
источник
C #,
7371 байтПри этом используются 0-индексированные значения n.
Отформатированная версия:
источник