Wyzwanie
Musisz napisać program, który pobiera dodatnią liczbę całkowitą n
jako dane wejściowe i wyprowadza n
th liczbę Fibonacciego (skróconą przez cały Fib #), która zawiera n
th Fib # jako podtekst. Na potrzeby tego wyzwania sekwencja Fibonacciego zaczyna się od 1
.
Oto kilka przykładów, które można wykorzystać jako przypadki testowe lub jako przykłady wyjaśniające wyzwanie (w przypadku tych ostatnich zostaw komentarz poniżej wyjaśniający, co uważasz za niejasne).
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
Jak zawsze, jest to gra w golfa kodowego , więc wybierz najniższą możliwą liczbę bajtów.
Jeśli coś jest mylące / niejasne, zostaw komentarz.
(To wyzwanie jest oparte na innym wyzwaniu, które opublikowałem: Wydrukuj n-tą liczbę pierwszą zawierającą n )
n=5
dołączyć skrzynkę testową, ponieważ właśnie popełniłem głupi błąd, gdy napisałem czek, który policzył liczbę kilka razy, jeśli miał podłańcuch więcej niż jeden raz.n=5
złapałbym to z powodu55
.n=25
(wyjście ma 1186 cyfr), po czym zostaje zabiten=26
(3085 cyfr skompilowanych na moim laptopie). Wydaje się, że pojawia się trudność, gdyfib(n)
dostaje się jeszcze jedną cyfrę (jak można się spodziewać). Następny skok, 31, ma 12990 cyfr w końcowym wyniku.Odpowiedzi:
Haskell ,
8584 bajtówEDYTOWAĆ:
l
.x>=s
dlax<=s
) w objaśnieniu.f
bierzeInt
i zwraca aString
.Wypróbuj online!
Jak to działa
l
to nieskończona lista liczb Fibonacciego, zdefiniowana rekurencyjnie jako częściowe sumy0:1:l
. Zaczyna się od,0
ponieważ listy są indeksowane 0.m
to ta sama lista przekonwertowana na ciągi.f
:n
jest liczbą wejściową ix
jest (ciągiem)n
liczby Fibonacciego.y
jest liczbą Fibonacciego sprawdzoną pod kątem tego, czy zawierax
jako podłańcuch. Przekazywaniey
s są gromadzone na liście i indeksowane z końcowym,!!n
aby dać wynik. Dox
testów dołączana jest dodatkowa , aby zaoszczędzić dwa bajty!!(n-1)
na końcu.y
s kilka razy, testy każdego z nichy
są zawinięteor
i kolejne zrozumienie listy.s
iteruje się poprzez przyrostkiy
.x
jest prefiksems
, sprawdzamy, czyx<=s
ix++":">s
. (":"
jest nieco arbitralny, ale musi być większy niż dowolna liczba).źródło
l=0:scanl(+)1l
zapisuje bajt.Galaretka ,
1514 bajtów1 bajt dzięki Jonathanowi Allanowi.
Wypróbuj online!
źródło
Python 2 ,
9986 bajtówb=i=x=-1 a=1
i upuszczającx and
f and n==2
dof*(n>2)
a,b=a+b,a
stenografiif-=str(x)in str(a)
, ściśnięta(n<2)*f
Wypróbuj online!
Wyjaśnienie:
Python 3 ,
12612011311211010199 bajtówWypróbuj online!
źródło
b=i=x=-1
a=1
i upuszczającx and
. (Zasadniczo rozpoczynając 3 kroki wcześniej w dwustronnej sekwencji Fibonacciego -1, 1, 0, 1, 1, 2, ....)-1
: Pn==2
naprawdę wymaga specjalnego traktowania. Ale można go skrócić*(n>2)
.Java,
118111 bajtówNadal uważam, że nie powinno się powielać bitu Fibonacciego, ale wszystkie moje wysiłki w jakiś sposób skutkują większą liczbą bajtów.
Dzięki Kevinowi za ulepszenia ... zgaduję, że to była moja pierwsza próba gry w golfa :)
źródło
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 bajtów)while(--n>0){q=p;p=c;c+=q;}
może byćfor(;--n>0;p=c,c+=q)q=p;
in=c;while(i>0){if((""+c).contains(""+n))--i;q=p;p=c;c+=q;}
może byćfor(n=c;i>0;q=p,p=c,c+=q)if((""+c).contains(""+n))--i;
. (W sumie: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 bajtów )Perl 6 , 45 bajtów
$_
jest argumentem funkcji;@f
jest sekwencją Fibonacciego, generowaną leniwie.źródło
JavaScript (ES6),
9693929086 bajtówIndeksowane 0, przy czym numerem 0 w sekwencji jest
1
. Bzdury na14
.26 bajtów zapisanych dzięki ArnauldowiSpróbuj
Wyjaśnienie
Zaktualizowana wersja do naśladowania, kiedy dostanę minutę.
źródło
Węgiel drzewny , 65 bajtów
Wypróbuj online! Link do pełnego kodu wyjaśniającego.
źródło
PHP , 96 bajtów
Wypróbuj online!
źródło
Mathematica, 85 bajtów
wkład
-4 bajty od @JungHwan Min
wydajność
źródło
f@i@n++
jest całkowicie poprawny, zmniejszając 1 bajt. UżycieFor
zamiastWhile
zmniejsza 3 bajty. 85 bajtów:(i=ToString;f=Fibonacci;For[n=t=0,t<#,If[i@f@n++~StringContainsQ~i@f@#,t++]];f[n-1])&
R
77 77bajtówTo wykorzystuje
gmp
bibliotekę dla liczby Fibonacciego. Dość prosta realizacja pytania.Niektóre testy
źródło
Clojure, 99 bajtów
Podstawowe rozwiązanie wykorzystuje nieskończoną sekwencję liczb Fibonacciego
s
.źródło
C #, 35 bajtów
Spróbuj
źródło
n
i po prostu wkładasz wyjścieb
(myślę). Możesz napisać ton
jako argumenty i zwrotyb
... Jestem też pewien, że nie obliczasz tego, o co prosi wyzwanie. Właściwie nie mam pojęcia, co robisz. Czy możesz podać użycie kodu, który możemy uruchomić, aby zweryfikować twoje rozwiązanie? (twojego „Try it” nie można uruchomić tak, jak jest ...)NewStack , 14 bajtów
Podział:
W języku angielskim: (z przykładem 3)
N∞
: Zrób listę liczb naturalnych[1,2,3,4,5,6...]
ḟᵢ
: Zapisz dane wejściowe w zmiennejf
[1,2,3,4,5,6...]
fi
: Konwertuj listę na liczby Fibonacciego[1,1,2,3,5,8...]
'fif
: Zachowaj wszystkie elementy, które zawierająf
th liczbę Fibonacciego[2,21,233...]
Ṗf⁻
: Wydrukujf-1
element th (-1 z powodu indeksowania 0)233
źródło
Japt ,
1615 bajtówSpróbuj
źródło