Napisz program lub nazwaną funkcję, która wyświetli lub zwróci sekwencję do n
czwartej liczby całkowitej w sekwencji Iccanobif, udokumentowanej w OEIS jako A014258 . Zauważ, że tylko zero elementu w sekwencji ( 0
) zostanie wydrukowane, jeśli n
wynosi zero.
Sekwencję generuje się, zaczynając od standardowej sekwencji Fibonacciego, ale po dodaniu dwóch poprzednich liczb odwracasz wynik i upuszczasz zera wiodące. Ciekawym faktem, przynajmniej dla mnie, jest to, że ta sekwencja nie zwiększa się ściśle (patrz lista poniżej). Wydaje się również, że jest (i prawdopodobnie jest) ściśle większa lub równa sekwencji Fibonacciego.
Dane wejściowe programu muszą być liczbą całkowitą.
Pierwsze 20 numerów sekwencji podano tutaj dla Twojej przyjemności oglądania:
0, 1, 1, 2, 3, 5, 8, 31, 93, 421, 415, 638, 3501, 9314, 51821, 53116, 739401, 715297, 8964541, 8389769
Standardowe luki są zabronione.
Najkrótszy program wygrywa.
EDYCJA: Dodano notatkę wyjaśniającą, że sekwencja zaczyna się od elementu zerowego i powinna być uwzględniona, jeśli n
wynosi zero.
Przykładowe możliwości IO:
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]
Teraz, gdy jest kilka odpowiedzi, poniżej są moje implementacje w Pythonie 2, które ciężko pracowałem, aby ukryć za pomocą znaczników:
Wielokrotny:
# Najbliżej mojego początkowego programu. 73 bajty. Należy również zauważyć, że ten program nie można osiągnąć przepełnienia stosu. Działa przez n = 5000 w mniej niż 10 sekund.i,a,b=input(),0,1 print a while i:print b;i,a,b=i-1,b,int(str(a+b)[::-1])
Rekurencyjne:
# Zauważ, że to drukujen
końcowe znaki nowej linii. 64 bajty. Uderzy błąd przepełnienia stosu dla dużych wartości n.def f(n,i=0,j=1):print i,n and f(n-1,j,int(str(i+j)[::-1]))or'';
Odpowiedzi:
Pyth,
171514Wypróbuj online
Bardzo podstawowa implementacja, zaczyna się od
range(2)
i dodaje liczbę elementów równą wartości wejściowej, a następnieodcina dodatkiodskakuje od ostatniego elementu.Dzięki @Jakube za wskazanie sprawy
>
odwrócenia.Wyjaśnienie
źródło
Python 2, 58 bajtów
Używa
str
do konwersji zamiast odwrotnych, ponieważ wystarczająco duże liczby w Pythonie 2 są napisane z literą L na końcu. Próbowałem funkcji rekurencyjnej, ale okazało się to dłużej (61):źródło
Julia, 79 bajtów
Tworzy to funkcję, która przyjmuje liczbę całkowitą jako dane wejściowe i zwraca tablicę liczb całkowitych.
Niegolfowane + wyjaśnienie:
Przykłady:
źródło
T-SQL, 149
Bardzo prosta funkcja wbudowanej tabeli, która wykorzystuje rekurencyjne zapytanie CTE. Ponieważ używa INTów, osiągnie limit 37. Dodanie CAST dla bigintów pozwoli mu pójść dalej do 63
Używa się go w następujący sposób
źródło
K,
2523 bajtówProsta modyfikacja jednego z przykładów w No Stinking Loops .
Fraza
.|$
rzuca liczbę na ciąg, odwraca ją, a następnie ocenia.Edytować:
Niechlujna uwaga z mojej strony na warunki brzegowe. Bardziej poprawne teraz:
Edycja 2:
(x+1)#
można zastąpić-1_
, oszczędzając 2 znaki. Spacja jest konieczna, ponieważ w przeciwnym razie_x
byłby to identyfikator, gdy chcę, aby operator „upuść” zastosował zmienną o nazwiex
.źródło
Haskell,
6449 bajtówPrzykład użycia:
q 15
->[0,1,1,2,3,5,8,31,93,421,415,638,3501,9314,51821,53116]
Jak to działa:
!
rekurencyjnie buduje nieskończoną listę liczb iccanobif, zaczynając od pierwszego argumentu (drugi argument musi być kolejnym numerem iccanobif).q
pobiera pierwszen
liczby z listy iccanobif zaczynając od1, 1
i poprzedza a0
.źródło
CJam, 18 bajtów
Jak to działa
Wypróbuj online tutaj
źródło
Java -
126124Od jakiegoś czasu nie widziałem Java w tej witrynie ...
f(5)
odbitki0 1 1 2 3 5 8 31 93 421 415 638
źródło
...System.out.println(c);
Integer.valueOf(
jenew Long(
(a następnie zmień równieżint
w pętli for nalong
). Jeśli wolisz po prostu pracować z liczbami całkowitymi,new Integer(
jest jeszcze krótszy niżInteger.valueOf(
.SWI-Prolog,
141131121 bajtówa(17,X).
Wyjścia bieżące :Wydrukowanie wyniku
a(10000,X).
na moim komputerze zajmuje około 10 sekund .Edycja: 121-bajtowa wersja powyżej jest definicją jednego predykatu = jedna linijka. Stara 131 bajtowa wersja jest następująca (należy ją uruchomić jako
p(17,X)
):źródło
> <> (Ryby)
592254 BajtówNie super golfa (42/43 blanki, które nic nie robią i łącznie 30 żetonów przekierowania), ale było ciekawym ćwiczeniem, które sprawiło, że zadziałało.
Możesz to przetestować tutaj , podając pożądaną długość w początkowym stosie.
EDYCJA: Liczba bajtów większa niż o połowę
źródło
PHP,
114, 109 bajtówNic szczególnego, tylko przeciętny algorytm Fibonacciego z odwrotną magią strun.
Nie golfowany:
źródło
Excel VBA, 279 bajtów
Uruchomienie makra poprosi użytkownika o wprowadzenie wartości n.
Wyniki zostaną następnie wydrukowane wiersz po wierszu w kolumnie A:
źródło
JavaScript (ES2015),
8173 bajtówUruchamianie tej funkcji (o nazwie
f
) z6
:źródło
Pip , 13 bajtów
Jestem prawie pewien, że wszystkie funkcje użyte w tym programie były obecne w Pipie przed zadaniem tego pytania.
Pobiera dane wejściowe jako argument wiersza polecenia. Wypróbuj online!
Wyjaśnienie
Wartości dwóch zmiennych ewoluują tak:
źródło
Pushy , 18 bajtów (niekonkurencyjny)
Wypróbuj online!
To nie jest najbardziej elegancki program, ale działa.
źródło
Galaretka , 9 bajtów (niekonkurencyjna)
Wypróbuj online!
źródło
R, 134 bajty
Przykład:
Chciałbym zobaczyć, czy ktoś ma lepszą alternatywę R niż wziąć twój numer, uczynić z niego ciąg znaków, odwrócić go i ponownie zamienić z powrotem na liczbę.
źródło
Groovy, 70 bajtów
źródło