Напишите программу или именованную функцию, которая будет выводить или возвращать последовательность с точностью до n
целого числа в последовательности Iccanobif, задокументированной в OEIS как A014258 . Обратите внимание, что только нулевой элемент в sequence ( 0
) будет напечатан, если n
равен нулю.
Последовательность генерируется, начиная со стандартной последовательности Фибоначчи, но после добавления двух предыдущих чисел вы переворачиваете результат и отбрасываете все ведущие нули. Интересный факт, по крайней мере для меня, заключается в том, что эта последовательность не увеличивается строго (см. Список ниже). Кажется также, что она (и, вероятно, есть) строго больше или равна последовательности Фибоначчи.
Ввод вашей программы должен быть целым числом.
Первые 20 номеров последовательности приведены здесь для вашего удобства просмотра:
0, 1, 1, 2, 3, 5, 8, 31, 93, 421, 415, 638, 3501, 9314, 51821, 53116, 739401, 715297, 8964541, 8389769
Стандартные лазейки запрещены.
Кратчайшая программа выигрывает.
РЕДАКТИРОВАТЬ: Добавлено примечание, чтобы уточнить, что последовательность начинается с нулевого элемента и должна быть включена, если n
равен нулю.
Примеры возможностей ввода / вывода:
0 -> 0
1 -> 0 1
6 -> 0 1 1 2 3 5 8
17 -> [0, 1, 1, 2, 3, 5, 8, 31, 93, 421, 415, 638, 3501, 9314, 51821, 53116, 739401, 715297]
Теперь, когда есть несколько ответов, ниже приведены мои реализации в Python 2, которые я усердно скрывал с помощью разметки:
Повторяющийся:
# Закрыть для моей начальной программы. 73 байта. Следует также отметить, что эта программа не может достичь переполнения стека. Он работает для n = 5000 менее чем за 10 секунд.i,a,b=input(),0,1 print a while i:print b;i,a,b=i-1,b,int(str(a+b)[::-1])
рекурсивные:
# Обратите внимание, что это печатаетn
завершающие символы новой строки. 64 байта. Будет ошибка переполнения стека для больших значений n.def f(n,i=0,j=1):print i,n and f(n-1,j,int(str(i+j)[::-1]))or'';
Ответы:
Пиф,
171514Попробуйте онлайн
Очень базовая реализация, начинается с
range(2)
и добавляет количество элементов, равное входному значению, а затемвырезает дополнительныеэлементы из последнего элемента.Спасибо @Jakube за то, что указал на
>
разворот.объяснение
источник
Python 2, 58 байт
Использует
str
преобразование, а не обратные метки, потому что достаточно большие числа в Python 2 пишутся с L в конце. Я попробовал рекурсивную функцию, но получилось дольше (61):источник
Юлия, 79 байт
Это создает функцию, которая принимает целое число в качестве входных данных и возвращает массив целых чисел.
Ungolfed + объяснение:
Примеры:
источник
T-SQL, 149
Очень прямая встроенная табличная функция, которая использует рекурсивный запрос CTE. Поскольку он использует INT, он достигнет 37. Добавление в CAST для bigints позволит ему пойти дальше до 63
Используется следующим образом
источник
K,
2523 байтаПростая модификация одного из примеров в No Stinking Loops .
Фраза
.|$
переводит число в строку, переворачивает его и затем оценивает.Редактировать:
Небрежное внимание к граничным условиям с моей стороны. Вернее сейчас:
Изменить 2:
(x+1)#
можно заменить-1_
, сохранив 2 символа. Пространство необходимо, потому что в противном случае_x
был бы идентификатор, когда я хочу, чтобы оператор «drop» применялся к переменной с именемx
.источник
Haskell,
6449 байтПример использования:
q 15
->[0,1,1,2,3,5,8,31,93,421,415,638,3501,9314,51821,53116]
Как это работает:
!
рекурсивно создает бесконечный список чисел iccanobif, начиная с его первого аргумента (второй аргумент должен быть следующим числом iccanobif).q
берет первыеn
числа из списка iccanobif, начиная с,1, 1
и добавляет a0
.источник
CJam, 18 байт
Как это работает
Попробуйте онлайн здесь
источник
Ява -
126124Я давно не видел Java вокруг этого сайта ...
f(5)
печать0 1 1 2 3 5 8 31 93 421 415 638
источник
...System.out.println(c);
Integer.valueOf(
наnew Long(
(а затем также изменитеint
цикл forlong
). Если вы предпочитаете просто работать с целыми числами,new Integer(
все равно корочеInteger.valueOf(
.SWI-Пролог,
141131121 байтЗапуск
a(17,X).
выходов:Требуется около 10 секунд, чтобы вывести результат
a(10000,X).
на мой компьютер.Изменить: 121-байтовая версия выше - это определение одного предиката = один лайнер. Старая 131-байтовая версия выглядит следующим образом (должна быть запущена как
p(17,X)
):источник
> <> (Рыба)
592254 байтаНе супер-гольф (42/43 бланки, которые ничего не делают, и всего 30 жетонов перенаправления), но это было интересное упражнение, заставляющее его работать в первую очередь.
Вы можете проверить это здесь , указав желаемую длину в начальном стеке.
РЕДАКТИРОВАТЬ: более чем вдвое меньше байтов
источник
PHP,
114, 109 байтНичего особенного, только обычный алгоритм Фибоначчи со строкой обратной магии.
Ungolfed:
источник
Excel VBA, 279 байт
Запуск макроса предложит пользователю ввести значение для n.
Результаты будут напечатаны построчно в столбце A:
источник
JavaScript (ES2015),
8173 байтаЗапуск этой функции (по имени
f
) с6
:источник
Пип , 13 байт
Я почти уверен, что все функции, использованные в этой программе, присутствовали в Pip до того, как был задан этот вопрос.
Принимает ввод в качестве аргумента командной строки. Попробуйте онлайн!
объяснение
Значения двух переменных развиваются следующим образом:
источник
Напористый , 18 байтов (неконкурентный)
Попробуйте онлайн!
Это не самая элегантная из программ, но она работает.
источник
Желе , 9 байт (не конкурирует)
Попробуйте онлайн!
источник
R, 134 байта
Пример:
Хотелось бы узнать, есть ли у кого-нибудь лучшая альтернатива R, чем взять ваш номер, сделать его строкой, обратить его обратно и снова превратить в число.
источник
Groovy, 70 байт
источник