Każdy zna sekwencję Fibonacciego:
bierzesz kwadrat, dołączasz do niego równy kwadrat, a następnie wielokrotnie dołączasz kwadrat, którego długość boku jest równa największej długości boku wynikowego prostokąta.
Rezultatem jest piękna spirala kwadratów, których ciąg liczb jest ciągiem Fibonacciego :
Ale co, jeśli nie chcielibyśmy używać kwadratów?
Jeśli użyjemy równobocznych trójkątów - zamiast kwadratów - w podobny sposób, otrzymamy równie piękną spiralę trójkątów i nową sekwencję: sekwencję Padovana , aka A000931 :
Zadanie:
Biorąc pod uwagę dodatnią liczbę całkowitą, , wyjście , ty termin w sekwencji Padovana LUB pierwsze warunki.
Załóżmy, że wszystkie trzy pierwsze sekwencje to . Zatem sekwencja rozpocznie się w następujący sposób:
Wejście:
Każda dodatnia liczba całkowita
Niepoprawne dane wejściowe nie muszą być brane pod uwagę
Wynik:
p określenie w PADOVAN sekwencji OR pierwszych względem PADOVAN sekwencji.N
Jeśli wydrukowanych zostanie pierwszych wyrażeń, wynik może być dowolny (lista / tablica, ciąg wielu wierszy itp.)
Może być indeksowany lub indeksowany
Przypadki testowe:
(indeksowane 0, ty termin)
Input | Output
--------------
0 | 1
1 | 1
2 | 1
4 | 2
6 | 4
14 | 37
20 | 200
33 | 7739
(1 indeksowane, pierwsze warunków)
Input | Output
--------------
1 | 1
3 | 1,1,1
4 | 1,1,1,2
7 | 1,1,1,2,2,3,4
10 | 1,1,1,2,2,3,4,5,7,9
12 | 1,1,1,2,2,3,4,5,7,9,12,16
Zasady:
To jest golf golfowy : im mniej bajtów, tym lepiej!
Standardowe luki są zabronione.
14
(Indeksowane 0) jest pokazane jako wyjście,28
podczas gdy uważam, że powinno dać37
a_0=1, a_1=0, a_2=0
. W końcu zostaje nieco przesunięty, ponieważ wtedya_5=a_6=a_7=1
Odpowiedzi:
Galaretka , 10 bajtów
Wypróbuj online!
1-indeksowany. Oblicza największy element: gdzie macierz binarna jest wygodnie obliczana jako:⎡⎣⎢010001110⎤⎦⎥n ⎡⎣⎢i s p r i m e (0)i s p r i m e (3)i s p r i m e (6)i s p r i m e (1)i s p r i m e (4)i s p r i m e (7)i s p r i m e (2)i s p r i m e (5)i s p r i m e (8)⎤⎦⎥
(jest to całkowity zbieg okoliczności).
źródło
Oaza , 5 bajtów
n -ty indeks 0-indeksowany
Wypróbuj online!
Wyjaśnienie
źródło
Galaretka ,
10 98 bajtówMonadyczny link akceptujący
n
(indeksowany 0), który dajeP(n)
.Wypróbuj online!
W jaki sposób?
ImplementujeP(n)=∑⌊n2⌋i=0(i+1n−2i)
A oto „twofer”
… zupełnie inna metoda także dla 8 bajtów (ta jest indeksowana 1, ale znacznie wolniej):
źródło
Haskell , 26 bajtów
Wypróbuj online! Zwraca indeks n-ty z n-tego terminu.
Myślałem, że „oczywiste” rozwiązanie rekurencyjne poniżej byłoby nie do pokonania, ale potem to znalazłem. Jest podobny do klasycznego wyrażenia golfowego
l=1:scanl(+)1l
dla nieskończonej listy Fibonacciego, ale tutaj różnica między sąsiednimi elementami to termin 4 pozycje wstecz. Możemy pisać bardziej bezpośredniol=1:1:zipWith(+)l(0:l)
, ale to dłużej.Gdyby to wyzwanie pozwoliło na uzyskanie nieskończonej ilości danych wyjściowych, moglibyśmy wyciąć pierwszy wiersz i mieć 20 bajtów.
27 bajtów
Wypróbuj online!
źródło
Python 2 , 30 bajtów
Wypróbuj online!
Zwraca indeksowany n-ty termin zero. Wyjścia
True
dla 1.źródło
Wolfram Language (Mathematica) , 33 bajty
1-indeksowany, zwraca n-ty termin
Wypróbuj online!
źródło
Octave / MATLAB,
3533 bajtówWyprowadza pierwsze n wyrażeń.
Wypróbuj online!
Jak to działa
Anonimowa funkcja, która implementuje filtr rekurencyjny .
'cbaa'-98
jest krótszą formą do wyprodukowania[1 0 -1 -1]
.2:n<5
jest krótszą formą do wytworzenia[1 1 1 0 0 ··· 0]
(warunki n- 1).filter(1,[1 0 -1 -1],[1 1 1 0 0 ··· 0])
przekazuje dane wejściowe[1 1 1 0 0 ··· 0]
przez filtr czasu dyskretnego zdefiniowany przez funkcję przesyłania ze współczynnikiem licznika1
i współczynnikiem mianownika[1 0 -1 -1]
.źródło
J , 22 bajty
-2 bajty dzięki ngn i Galen
formularz zamknięty, 26 bajtów
Wypróbuj online!
iteracyjny, 22 bajty
Wypróbuj online!
źródło
1:
->#
: Wypróbuj online!1:
->1
. „niekorzystny” działa najwyraźniej z rzeczownikiem po prawejRetina ,
4742 bajtówWypróbuj online! Generuje pierwsze
n
warunki w osobnych wierszach. Wyjaśnienie:Wymień wkład z warunkami dla
-2
,-1
i0
.Wygeneruj następne
n
terminy, korzystając z relacji powtarzalności.*_
tutaj jest skrót, dla$&*_
którego konwertuje (pierwszą) liczbę w dopasowaniu na unarny, podczas gdy$1*
jest skrót, dla$1*_
którego zamienia środkową liczbę na unarny. W$.(
Zwraca sumę dziesiętną jednoargumentowych swoich argumentów, czyli sumę liczb pierwszych i środkowych.Odrzuć pierwsze sześć znaków, tj. Pierwsze trzy linie.
źródło
Cubix , 20 bajtów
To jest indeksowane 0 i zwraca N- ty termin
Wypróbuj online!
Owija się w kostkę o długości boku 2
Zobacz, jak biegnie
I010
- Inicjuje stos+p?
- Dodaje górę stosu, wyciąga licznik z dołu stosu i testuje/;UO@
- Jeśli licznik wynosi 0, odbij się od górnej powierzchni, usuń TOS, zawracanie, wyjście i zatrzymanie\(sqq;W
- Jeśli licznik jest dodatni, odbij, zmniejsz licznik, zamień TOS, naciśnij dwa razy od góry do dołu, usuń TOS i przesuń linię z powrotem do głównej pętli.źródło
Python 2 ,
5648 bajtówWypróbuj online!
Zwraca ntą wartość, indeksowaną 0.
źródło
Perl 6 , 24 bajtów
Wypróbuj online!
Całkiem standardowa generowana sekwencja, z każdym nowym elementem generowanym przez wyrażenie
* + * + !*
. Dodaje to trzeci poprzedni element, drugi poprzedni element i logiczną negację poprzedniego elementu, która zawszeFalse
jest równa zero.źródło
05AB1E , 8 bajtów
Wypróbuj online!
1Ð)
1D)
3Å1
£
W jaki sposób?
źródło
1Ð)
mogą być 2 bajty na godzinę. Mogę wymyślić sześć różnych 3-bajtowych alternatyw , ale żadnych 2-bajtowych.APL (Dyalog Unicode) ,
201817 bajtów SBCSTen kod ma indeks 1. Jest to ta sama liczba bajtów, aby uzyskać
n
elementy sekwencji Padovan, ponieważ musisz upuścić ostatnich kilku dodatkowych członków. Jest to również ta sama liczba bajtów, aby uzyskać indeksowanie 0.Edycja: -2 bajty dzięki ngn. -1 bajt dzięki ngn
Wypróbuj online!
Wyjaśnienie
źródło
K (ngn / k) ,
2420 bajtów-4 bajty dzięki ngn!
Wypróbuj online!
Indeksowane 0, pierwsze N warunków
źródło
f[x-2]+f[x-3]
->+/o'x-2 3
(o
is „1:
->#
w rozwiązaniu jx86 32-bitowy kod maszynowy, 17 bajtów
Demontaż:
Jest indeksowany na 0. Inicjalizacja jest dogodnie osiągana poprzez obliczenie eax * 0. 128-bitowym wynikiem jest 0, i przechodzi w edx: eax.
Na początku każdej iteracji kolejność rejestrów to ebx, eax, edx. Musiałem wybrać właściwą kolejność, aby skorzystać z kodowania
xchg eax
instrukcji - 1 bajt.Musiałem dodać 4 do licznika pętli, aby pozwolić na osiągnięcie wyniku
eax
, który utrzymuje wartość zwracaną przez funkcję wfastcall
konwencji.Mógłbym użyć innej konwencji wywoływania, która nie wymaga zapisywania i przywracania
ebx
, ale ifastcall
tak jest fajna :)źródło
Galaretka , 11 bajtów
Wypróbuj online!
0-indeksowane.
źródło
Lua 5.3,
4948 bajtówWypróbuj online!
Vanilla Lua nie ma przymusu wartości logicznych na ciągi znaków (nawet
tonumber(true)
zwracanil
), więc musisz użyć operatora pseudo-trójskładnikowego. Ta wersja ma indeks 1, podobnie jak wszystkie Lua.1or
Część ma zostać zmieniona na1 or
w Lua 5.1, który ma inny sposób Lexing liczb.źródło
Rubinowy , 26 bajtów
Wypróbuj online!
źródło
JavaScript (ES6), 23 bajty
Wypróbuj online!
źródło
true
jest tym samym, co zwracanie,1
jeśli reszta danych wyjściowych to liczby.Japt
-N
, 12 bajtówSpróbuj
źródło
TI-BASIC (TI-84), 34 bajty
Wejście jest w
Ans
.Wyjście jest włączone
Ans
i jest automatycznie drukowane.Doszedłem do wniosku, że minęło już wystarczająco dużo czasu, a także opublikowano wiele odpowiedzi, z których wiele było poza tą odpowiedzią.Przykład:
Wyjaśnienie:
źródło
Pyth, 16 bajtów
To definiuje funkcję
y
. Wypróbuj tutaj!Oto zabawniejsze rozwiązanie, choć jest o 9 bajtów dłuższe; bajty można jednak ogolić.
Wykorzystuje to definicję podaną przez Davida Callana na stronie OEIS: „a (n) = liczba kompozycji nw częściach nieparzystych i> = 3.” Wypróbuj tutaj! Pobiera dane wejściowe bezpośrednio zamiast definiować funkcję.
źródło
y-b2y-b3
może być refaktoryzowany za pomocą rozwidlenia lubL
? Jednak zadeklarowanie układu 2 elementów jest kosztowne.yL-Lb2,3
jest dłuższy :(+y-b2y-b3
zsmy-bdhB2
którym jest taka sama ilość bajtów;hB2
wyniki w tablicy[2, 3]
hB2
. Szkoda, że ta sama liczba bajtów.d
się mapy.Java, 41 bajtów
Nie można użyć lambda (błąd czasu wykonywania). Port tej odpowiedzi Javascript
TIO
źródło
R + pryr ,
3836 bajtówFunkcja rekurencyjna o indeksie zerowym.
Wypróbuj online!
Dzięki @Giuseppe za wskazanie dwóch oczywiście niepotrzebnych bajtów.
źródło
pryr
, język powinien,R + pryr
a może to być 36 bajtówC (brzęk) ,
4133 bajtówWypróbuj online!
źródło
C # (interaktywny kompilator Visual C #) , 34 bajty
Wypróbuj online!
źródło
Perl 5 , 34 bajtów
Wypróbuj online!
źródło
Wolfram Language (Mathematica) , 26 bajtów
Wypróbuj online!
źródło
Pari / GP , 28 bajtów
0-indeksowane.
Wypróbuj online!
Pari / GP , 35 bajtów
1-indeksowany.
Wypróbuj online!
źródło