Как вы, вероятно, знаете, число Фибоначчи - это число, которое является суммой двух предыдущих чисел в серии.
Цифра Фибоначчи ™ - это сумма двух предыдущих цифр .
Например, для начала 1,1
ряда серия будет иметь вид 1,1,2,3,5,8,13,4,7,11,2...
Изменение после того 13
, где вместо добавления 8+13
вы добавляете 1+3
. Серия повторяется в конце, где 4+7=11
и так 1+1=2
же, как начинается серия.
В качестве другого примера, в ряд , начинающийся 2,2
: 2,2,4,6,10,1,1,2,3,5,8,13,4,7,11,2,3...
. Начинается однозначно, но после того, как цифры суммируются с 10
, вы заканчиваете 1+0=1, 0+1=1
, и серия продолжается - и повторяется - так же, как и 1,1
серия.
Соревнование
С учетом целочисленного ввода 0≤n≤99
рассчитайте цикл в серии цифр Фибоначчи, начиная с этих двух цифр. (Вам, безусловно, разрешено рассматривать целые числа вне этого диапазона, но это не обязательно.) Если дан ввод из одной цифры, ваш код должен интерпретировать его как обозначение начала ряда 0,n
.
Все числа в цикле, состоящие из двух цифр, должны быть выведены как две цифры. Так, например, цикл for 1,1
будет содержать 13
, а не 1,3
.
Вывод начинается с первого числа в цикле. Итак, исходя из вышеуказанных ограничений, цикл for 1,1
начинается с 2
, так как 1,1
и 11
учитывается отдельно.
Каждое число выходных данных может быть разделено тем, что вы хотите, если это соответствует. Во всех моих примерах я использую запятые, но разрешены пробелы, разрывы строк, случайные буквы и т. Д., Если вы всегда используете одинаковое разделение. Так 2g3g5g8g13g4g7g11
что это законный выход для 1
, но 2j3g5i8s13m4g7sk11
это не так. Вы можете использовать строки, списки, массивы, что угодно, при условии, что у вас есть правильные числа в правильном порядке, разделенные последовательным разделителем. Также допускается брекетинг всего вывода (например, (5,9,14)
или [5,9,14]
и т. Д.).
Тестовые случаи:
1 -> 2,3,5,8,13,4,7,11
2 -> 2,3,5,8,13,4,7,11
3 -> 11,2,3,5,8,13,4,7
4 -> 3,5,8,13,4,7,11,2
5 -> 2,3,5,8,13,4,7,11
6 -> 3,5,8,13,4,7,11,2
7 -> 14,5,9
8 -> 13,4,7,11,2,3,5,8
9 -> 11,2,3,5,8,13,4,7
0 -> 0
14 -> 5,9,14
59 -> 5,9,14
Это код-гольф , поэтому побеждает меньшее количество байтов.
14
и59
даю такой же результат. Если59
интерпретируется как запуск5,9
и разрешение этого как часть цикла, то, конечно,14
должно быть начало его цикла?0,1,1,2,3,5,8,13,4,7,11,2,3
. Первый раз, когда цикл повторяется, во второй2
.1,4,5,9,14,5
и5,9,14,5,9
. Оба они повторяют, начиная со второго5
. Как я сказал ранее, только вход разделен; более поздние числа сохраняют свои цифры в последовательности.Ответы:
Желе , 15 байт
Попробуйте онлайн!
Как это работает
источник
Perl 6 ,
96 7875 байт-3 байта благодаря nwellnhof
Попробуйте онлайн!
0 возвращает 0, а другое число возвращает объект Match, который преобразуется в числа, разделенные пробелом с пробелом в конце.
Объяснение:
источник
JavaScript (ES6),
111 104103 байтПопробуйте онлайн!
комментарии
источник
Python 3 ,
1871761581391381291211201129695120116 байтовПопробуйте онлайн!
Редактировать: Как отмечает @ Jules , более короткое решение применимо к Python 3.6+.Больше нет четких решений для Python 3 / 3.6+Изменить: индексирование
z
было слишком многословно. Без этого сейчас нет пользы в использованииeval
.Изменить: Упрощенный поиск, если последние два элемента уже появились в последовательности.
Изменить: Изменен формат вывода из списка на кортеж + заменен
lambda
наdef
Изменить: Вернуться,
lambda
но встроенt
вf
.Редактировать: Входные данные
n
могут фактически интерпретироваться как глава растущей коллекции,z
которая будет представлять хвост в рекурсивном подходе. Также снова побеждает решение @ Arbo .Изменить: На самом деле вы можете распаковать два предмета из головы, который сокращает еще 16 байтов.
Изменить: На самом деле 17 байтов.
Редактировать: Как отмечает @ Arbo, решение давало ответы
14
и59
кейсы, которые были в первоначальных тестовых примерах, которые впоследствии оказались неверными. Пока это не так коротко, но, по крайней мере, работает правильно.Довольно злоупотребление
f-strings
иeval
. Оригинальный негольфовый код, хотя я подозреваю, что это можно сделать как-то проще:источник
59
урожайности(14, 5, 9)
C (gcc) ,
114112109 байтовПопробуйте онлайн!
-3 от потолка
Включает конечный пробел.
источник
do...while
фигурные скобки не нужны, если это одно утверждение O_oPerl 5,
9076 байтTIO
источник
Java (JDK) , 194 байта
Попробуйте онлайн!
Жесткий код казался самым коротким, учитывая, что у Python уже был ответ 187 ...
источник
Haskell, 100 байт
Попробуйте онлайн!
источник
Python 2 ,
123114113 байтовПопробуйте онлайн!
Программа создает кортеж
p
из всех двухзначных пар, которые встречаются в последовательности, которая инициализируется с помощью мусора, чтобы сохранить несколько байтов. Сама последовательность встроена в кортежl
, а последние два элемента этого кортежа хранятсяb
для удобства (и краткости). Как только повторение будет найдено, мы можем посмотреть индексb
вp
знать , где начинается цикл.РЕДАКТИРОВАТЬ: немного убрал это, и сбрил еще один байт ... Мой метод, кажется, приближается к пределу количества байтов, и я действительно должен прекратить работать над этим.
источник
Древесный уголь , 46 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Введите число, введите его до 2 символов, затем возьмите цифровую сумму каждого символа и сохраните полученный список.
Повторите, пока список циклов пуст.
Вычислите сумму двух предыдущих цифр и добавьте ее в список Фибоначчи.
Возьмите все нетривиальные суффиксы из списка.
Отфильтруйте те, которые не повторяются, и сохраните результат в списке циклов.
Приведите список циклов к строке и напечатайте.
источник
Красный ,
189178164137 байтПопробуйте онлайн!
источник
Python 2 ,
149139 байтПопробуйте онлайн!
Ожидает неотрицательное целое число в качестве входных данных. Меньше по количеству пользователей, но, скорее всего, больше не будет работать для целых чисел> 99.
Объяснение:
источник