Nie jest to bardzo znane, ale to, co nazywamy sekwencją Fibonacciego, AKA
1, 1, 2, 3, 5, 8, 13, 21, 34...
nazywa się właściwie sekwencją Duonacciego . Jest tak, ponieważ aby uzyskać następny numer, sumujesz poprzednie 2 liczby. Istnieje również sekwencja Tribonacci ,
1, 1, 1, 3, 5, 9, 17, 31, 57, 105, 193, 355, 653, 1201...
ponieważ następny numer jest sumą poprzednich 3 liczb. I sekwencja Quadronacciego
1, 1, 1, 1, 4, 7, 13, 25, 49, 94, 181, 349, 673...
I ulubieniec wszystkich, sekwencja Pentanacciego :
1, 1, 1, 1, 1, 5, 9, 17, 33, 65, 129...
I sekwencja Hexanacciego, sekwencja Septanacciego, sekwencja Octonacciego i tak dalej, i tak dalej aż do sekwencji N-Bonacciego.
Sekwencja N-bonacci zawsze zaczyna się od N 1s z rzędu.
Wyzwanie
Musisz napisać funkcję lub program, który przyjmuje dwie liczby N i X i wypisuje pierwsze liczby X N-Bonacci. N będzie liczbą całkowitą większą niż 0 i możesz bezpiecznie założyć, że żadne liczby N-Bonacci nie przekroczą domyślnego typu liczb w twoim języku. Dane wyjściowe mogą być w dowolnym formacie czytelnym dla człowieka, a dane wejściowe można przyjmować w dowolny rozsądny sposób. (Argumenty wiersza poleceń, argumenty funkcji, STDIN itp.)
Jak zwykle jest to gra w golfa, więc obowiązują standardowe luki i wygrywa najkrótsza odpowiedź w bajtach!
Próbka IO
#n, x, output
3, 8 --> 1, 1, 1, 3, 5, 9, 17, 31
7, 13 --> 1, 1, 1, 1, 1, 1, 1, 7, 13, 25, 49, 97, 193
1, 20 --> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
30, 4 --> 1, 1, 1, 1 //Since the first 30 are all 1's
5, 11 --> 1, 1, 1, 1, 1, 5, 9, 17, 33, 65, 129
1, 1, 2, 4, 7
na trzeciej pozycji0 + 1 + 1
? ... a więc jedno z innymi?Odpowiedzi:
Boolfuck, 6 bajtów
Domyślny typ liczby w Boolfuck jest trochę. Zakładając, że rozciąga się to również na liczby wejściowe N i X, a biorąc pod uwagę, że N> 0, istnieją tylko dwa możliwe wejścia - 10 (które nie dają niczego) i 11 (które wyjścia 1).
,
wczytuje trochę do bieżącej lokalizacji pamięci. N jest ignorowane, ponieważ musi być 1. Jeśli X wynosi 0, ciało pętli (otoczone przez[]
) jest pomijane. Jeśli X wynosi 1, jest wyprowadzane, a następnie przestawiane na 0, aby pętla się nie powtarzała.źródło
Python 2, 79 bajtów
Wypróbuj online
źródło
exec"v=[sum(f[i-n:]),1][i<n];f+=[v];print v;i+=1;"*x
Pyth, 13 lat
Pakiet testowy
Oddziela znak nowej linii od
n
pierwszego.Wyjaśnienie:
źródło
Haskell, 56 bajtów
Przykład użycia:
3 # 8
->[1,1,1,3,5,9,17,31]
.Jak to działa
źródło
tail l
zamiastinit l
?n
elementy na liście. Nie ma różnicy między usuwaniem od końca i dodawaniem do przodu i odwrotnie, tj. Usuwaniem od przodu i dodawaniem do końca, ponieważ początkowa lista składa się tylko z1
s.++[]
przez:
!Python 2, 55 bajtów
Śledzi
n
okno długości sekwencji na liściel
, aktualizowane przez dodanie sumy i usunięcie pierwszego elementu. Drukuje pierwszy element każdej iteracji dlax
iteracji.Inne podejście do przechowywania wszystkich elementów i sumowania ostatnich
n
wartości dało tę samą długość (55).źródło
JavaScript ES6 / ES2015,
107978580 bajtówDzięki @ user81655, @Neil i @ETHproductions za zaoszczędzenie niektórych bajtów
spróbuj online
Przypadki testowe:
źródło
for
zawsze jest lepsze niżwhile
,x.split('')
->[...x]
,~~a
->+a
,n-=1
->n--
, jeśli zamkniesz całe ciało funkcji weval
, nie musisz pisaćreturn
. Ponadto, nawet krótszy niż[...'1'.repeat(i)]
jestArray(i).fill(1)
i można usunąć~~
za
ib
. I możesz usunąćf=
.(i,n)=>eval("for(l=Array(i).fill(1);n-->i;)l.push(l.slice(-i).reduce((a,b)=>a+b));l")
. Zmieniłem kolejność instrukcji, połączyłem argumentyn--
wn-i
i usunąłeml
z argumentów, aby zaoszczędzić kilka dodatkowych bajtów.eval
oszczędności;(i,n)=>{for(l=Array(i).fill(1);n-->i;)l.push(l.slice(-i).reduce((a,b)=>a+b));return l}
ma nadal 85 bajtów.l.slice(-i).reduce((a,b)=>a+b)
=>eval(l.slice(-i).join`+`)
ES6, 66 bajtów
Niestety
map
nie pozwoli ci uzyskać dostępu do tablicy wyników w wywołaniu zwrotnym.źródło
Galaretka, 12 bajtów
Wypróbuj online!
Jak to działa
źródło
C ++ 11, 360 bajtów
Cześć, podoba mi się to pytanie. Wiem, że c ++ jest bardzo trudnym językiem do wygrania tego konkursu. Ale i tak wrzucę monetę.
Zostawię to jako czytelne wyjaśnienie powyższego kodu.
źródło
int
s, usuńint
. Jeśli jakieś funkcje są wywoływanefoo
, wywołaj jef
. Bądź brutalny; zignoruj standard i wykorzystaj kompilator. Tak grasz w golfa.Haskell , 47 bajtów
Wypróbuj online!
<$
mógł zostać wprowadzony do Preludium po opublikowaniu tego wyzwania.Haskell , 53 bajty
Wypróbuj online!
Definiuje funkcję binarną
?
, używaną jak3?8 == [1,1,1,3,5,9,17,31]
.Funkcja pomocnicza
%
rekurencyjnie znajdujei
element thn
sekwencji -bonacci, sumując poprzednien
wartości. Następnie funkcja?
zestawia pierwszex
wartości%
.źródło
%
”?i<=n
wi>n
.APL, 21
Jest to funkcja, która przyjmuje n za lewy argument, a x za prawy argument.
Wyjaśnienie:
Przypadki testowe:
źródło
Python 3, 59
Zaoszczędzono 20 bajtów dzięki FryAmTheEggman.
Nie jest to świetne rozwiązanie, ale na razie będzie działać.
Również tutaj są przypadki testowe:
źródło
Java, 82 + 58 = 140 bajtów
Funkcja znajdowania i- tej liczby n -bonacci ( 82 bajtów ):
Funkcja wypisania pierwszej k n -liczby numerycznej ( 58 bajtów ):
źródło
Brain-Flak ,
144124122 bajtów-20 bajtów dzięki Nitroden
To jest moja pierwsza odpowiedź Brain-Flak i jestem pewien, że można ją poprawić. Każda pomoc jest mile widziana.
Wypróbuj online!
źródło
Pari / GP , 46 bajtów
Funkcja generująca sekwencję to:
Wypróbuj online!
źródło
Julia, 78 bajtów
Jest to funkcja, która akceptuje dwie liczby całkowite i zwraca tablicę liczb całkowitych. Podejście jest proste: wygeneruj tablicę jedności długości
n
, a następnie powiększ tablicę, dodając sumę poprzednichn
elementów, aż tablica będzie miała długośćx
.Nie golfowany:
źródło
MATL , 22
26bajtówUżywa bieżącej wersji (10.2.1) języka / kompilatora.
Wypróbuj online!
Kilka dodatkowych bajtów :-( z powodu błędu w
G
funkcji (wklejanie danych; teraz poprawione do następnej wersji)Wyjaśnienie
źródło
Perl 6 , 38 bajtów
Stosowanie:
źródło
C, 132 bajty
Podejście rekurencyjne jest krótsze o kilka bajtów.
Nie golfił
źródło
Łuska , 9 bajtów
Wypróbuj online!
Zaczyna się od
B
ase-1
reprezentacji N (po prostu listy N ) i¡
terapeutycznie sumuje (Σ
) ostatnie (↑_
) N elementów i dołącza wynik do listy. Na koniec pobiera (↑
) pierwsze X liczb z tej listy i zwraca je.źródło
Rubin , 41 bajtów
Wypróbuj online!
źródło
R , 68 bajtów
Wypróbuj online!
źródło
K (ngn / k) ,
2624 bajtówWypróbuj online!
źródło
Perl 6,
52 ~ 7247 ~ 67 bajtówWymaga modułu z
MONKEY-SEE-NO-EVAL
powodu następującego błędu:źródło
PHP , 78 bajtów
Wypróbuj online!
-4 Bajty za pomocą PHP> = 7.1
[,$n,$x]
zamiastlist(,$n,$x)
źródło
Jq 1,5 , 67 bajtów
Zakłada dane wejściowe dostarczone przez N i X, np
Rozszerzony
Wypróbuj online!
źródło
J, 31 bajtów
Nie golfowany:
wyjaśnienie
Czas zabawy z czasownikiem mocy w jego formie :
Szczegółowy podział:
] {. ...
Weź pierwsze<right arg>
elementy wszystkich tych rzeczy po prawej stronie, które działają ...<left> ^: <right>
stosuj czasownik<left>
wielokrotnie<right>
… gdzie<right>
jest określony przez środkowy gerund in(-@[
](1 #~ [)
, tj.]
tzn. prawy argument przekazany do samej funkcji. Więc co to jest<left>
? ...(] , [: +/ [ {. ])
Lewy argument do całej frazy jest najpierw przekształcany przez pierwszego gerunda, tj-@[
. Oznacza to, że lewy argument tego wyrażenia jest ujemny od lewego argumentu do ogólnej funkcji. Jest to potrzebne, aby fraza[ {. ]
wzięła ostatnie elementy z listy zwrotów, którą tworzymy. Te są następnie sumowane:+/
. I wreszcie dołączone do tej samej liście zwrotnym:] ,
.(1 #~ [)
- powtórz 1 razy „lewy arg”.Wypróbuj online!
źródło
Mathematica, 59 bajtów
Prawdopodobnie będziesz chciał
Clear@f
między wywołaniami funkcji. Argumenty sąn,x
, podobnie jak przypadki testowe.źródło
Tidy , 36 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Japt , 18 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło