Вызов
Вы должны написать программу, которая принимает положительное целое число в n
качестве входных данных и выводит число n
Фибоначчи th (сокращенное на Fib # повсюду), которое содержит n
th Fib # в качестве подстроки. Для целей этой задачи последовательность Фибоначчи начинается с 1
.
Вот несколько примеров, которые вы можете использовать в качестве тестовых случаев или в качестве примеров, чтобы прояснить проблему (для последнего, пожалуйста, оставьте комментарий внизу, объясняющий, что вы находите неясным).
n=1
Fib#s: 1
^1 1st Fib# that contains a 1 (1st Fib#)
Output: 1
n=2
Fib#s: 1, 1
^1 ^2 2nd Fib# that contains a 1 (2nd Fib#)
Output: 1
n=3
Fib#s: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233
^1 ^2 ^3 3rd Fib# that contains a 2 (3rd Fib#)
Output: 233
n=4
Output: 233
n=5
Output: 6765
n=6
Output: 28657
n=7
Output: 1304969544928657
n=8
Output: 14472334024676221
n=9
Output: 23416728348467685
n=10
Fib#s: 1, ..., 34, 55, 89, ..., 63245986, 102334155, 165580141, ..., 2880067194370816120, 4660046610375530309
^1 ^2 ^3 ^10 10th Fib# that contains a 55 (10th Fib#)
Output: 4660046610375530309
Как всегда, это код-гольф , поэтому выбирайте минимально возможное количество байтов.
Если что-то сбивает с толку / неясно, пожалуйста, оставьте комментарий.
(Эта задача основана на другой проблеме, которую я опубликовал: выведите n-е простое число, содержащее n )
n=5
тестовый пример, потому что я только что сделал глупую ошибку, когда написал чек, который подсчитал число несколько раз, если подстрока была более одного раза.n=5
поймал бы это из-за55
.n=25
(выход имеет 1186 цифр), а затем уничтожаетсяn=26
(3085 цифр скомпилировано на моем ноутбуке). Кажется, что скачок в сложности всякий раз, когдаfib(n)
получает еще одну цифру (как и следовало ожидать). Следующий скачок, 31, имеет 12990 цифр в конечном выводе.Ответы:
Haskell ,
8584 байтаРЕДАКТИРОВАТЬ:
l
.x>=s
дляx<=s
) в объяснении.f
принимаетInt
и возвращаетString
.Попробуйте онлайн!
Как это работает
l
бесконечный список чисел Фибоначчи, рекурсивно определенный как частичные суммы0:1:l
. Это начинается с того,0
что списки индексируются 0.m
это тот же список, преобразованный в строки.f
:n
является входным числом иx
является (строкой)n
числа Фибоначчи.y
это число Фибоначчи, проверенное на предмет наличияx
в качестве подстроки. Передачаy
s собирается в списке и индексируется с последним,!!n
чтобы дать вывод. Кx
тестам добавляется дополнительный, чтобы сэкономить два байта при использовании!!(n-1)
в конце.y
s несколько раз, тесты каждого изy
них обернутыor
и понимание другого списка.s
перебирает суффиксыy
.x
является ли префиксs
, мы проверяем,x<=s
иx++":">s
. (":"
несколько произвольно, но должно быть больше любой цифры.)источник
l=0:scanl(+)1l
сохраняет байт.Желе ,
1514 байт1 байт благодаря Джонатану Аллану.
Попробуйте онлайн!
источник
Python 2 ,
9986 байтb=i=x=-1 a=1
и заканчиваяx and
f and n==2
вf*(n>2)
a,b=a+b,a
сокращенный экономический свопf-=str(x)in str(a)
, сжатый(n<2)*f
Попробуйте онлайн!
Объяснение:
Python 3 ,
12612011311211010199 байтПопробуйте онлайн!
источник
b=i=x=-1
a=1
и опускаяx and
. (По сути, начало на 3 шага раньше в двусторонней последовательности Фибоначчи -1, 1, 0, 1, 1, 2, ....)-1
: Pn==2
действительно нуждается в особом подходе. Но это может быть сокращено до*(n>2)
.Ява,
118111 байтЯ продолжаю думать, что должна быть возможность не дублировать бит Фибоначчи, но все мои усилия как-то приводят к большему количеству байтов.
Спасибо Кевину за улучшения ... думаю, это показывает, что это была моя первая попытка игры в гольф :)
источник
i->{long n=i,p=0,q,c=1;while(--n>0){q=p;p=c;c+=q;}n=c;while(i>0){if((""+c).contains(""+n))--i;q=p;p=c;c+=q;}return p;}
(118 байт)while(--n>0){q=p;p=c;c+=q;}
могут бытьfor(;--n>0;p=c,c+=q)q=p;
иn=c;while(i>0){if((""+c).contains(""+n))--i;q=p;p=c;c+=q;}
могут бытьfor(n=c;i>0;q=p,p=c,c+=q)if((""+c).contains(""+n))--i;
. (Всего:i->{long n=i,p=0,q,c=1;for(;--n>0;p=c,c+=q)q=p;for(n=c;i>0;q=p,p=c,c+=q)if((""+c).contains(""+n))--i;return p;}
( 111 байт )Perl 6 , 45 байт
$_
аргумент функции;@f
является последовательностью Фибоначчи, лениво порожденной.источник
JavaScript (ES6),
9693929086 байт0-индексированный, с 0-м номером в последовательности
1
. Выкидывает на14
.26 байт сэкономлено благодаря АрноПопытайся
объяснение
Обновленная версия, чтобы следовать, когда я получу минуту.
источник
Древесный уголь , 65 байт
Попробуйте онлайн! Ссылка на подробный код для объяснения.
источник
PHP , 96 байт
Попробуйте онлайн!
источник
Mathematica, 85 байт
вход
-4 байта от @JungHwan Min
выход
источник
f@i@n++
полностью корректно, уменьшается на 1 байт. ИспользованиеFor
вместоWhile
уменьшает 3 байта. 85 байтов:(i=ToString;f=Fibonacci;For[n=t=0,t<#,If[i@f@n++~StringContainsQ~i@f@#,t++]];f[n-1])&
R,
7772 байтаЭто использует
gmp
библиотеку для числа Фибоначчи. Довольно прямолинейная реализация вопроса.Некоторые тесты
источник
Clojure, 99 байт
Основное решение, использует бесконечную последовательность чисел Фибоначчи
s
.источник
C #, 35 байт
Попытайся
источник
n
а вы просто помещаете выходb
(я думаю). Вы могли бы написать, что принимают вn
качестве аргументов и возвращенийb
... Кроме того, я почти уверен, что вы не вычисляете, что требует задача. На самом деле, я понятия не имею, что вы вычисляете. Не могли бы вы предоставить использование кода, который мы можем запустить для проверки вашего решения? (ваш «Попробуй» не может быть запущен как есть ..)NewStack , 14 байтов
Разбивка:
На английском языке: (с примером ввода 3)
N∞
: Составьте список натуральных чисел[1,2,3,4,5,6...]
ḟᵢ
: Сохранить ввод в переменнойf
[1,2,3,4,5,6...]
fi
: Преобразовать список в числа Фибоначчи[1,1,2,3,5,8...]
'fif
: Сохранить все элементы, содержащие числоf
Фибоначчи[2,21,233...]
Ṗf⁻
: Печатьf-1
элемента th (-1 из-за индексации на основе 0)233
источник
Japt ,
1615 байтПопытайся
источник