Dies ist nicht sehr bekannt, aber was wir die Fibonacci-Sequenz, AKA, nennen
1, 1, 2, 3, 5, 8, 13, 21, 34...
heißt eigentlich die Duonacci- Sequenz. Dies liegt daran, dass Sie die vorherigen 2 Zahlen summieren, um die nächste Zahl zu erhalten. Es gibt auch die Tribonacci- Sequenz,
1, 1, 1, 3, 5, 9, 17, 31, 57, 105, 193, 355, 653, 1201...
weil die nächste Zahl die Summe der vorherigen 3 Zahlen ist. Und die Quadronacci- Sequenz
1, 1, 1, 1, 4, 7, 13, 25, 49, 94, 181, 349, 673...
Und jedermanns Liebling, die Pentanacci- Sequenz:
1, 1, 1, 1, 1, 5, 9, 17, 33, 65, 129...
Und die Hexanacci- Sequenz, die Septanacci- Sequenz, die Octonacci- Sequenz und so weiter bis zur N-Bonacci-Sequenz.
Die N-Bonacci-Sequenz beginnt immer mit N Einsen in einer Reihe.
Die Herausforderung
Sie müssen eine Funktion oder ein Programm schreiben, die bzw. das zwei Zahlen N und X annimmt und die ersten X N-Bonacci-Zahlen ausgibt. N ist eine ganze Zahl größer als 0, und Sie können davon ausgehen, dass keine N-Bonacci-Zahlen den in Ihrer Sprache voreingestellten Zahlentyp überschreiten. Die Ausgabe kann in jedem für Menschen lesbaren Format erfolgen, und Sie können Eingaben auf jede vernünftige Weise vornehmen. (Befehlszeilenargumente, Funktionsargumente, STDIN usw.)
Wie üblich ist dies Code-Golf, daher gelten Standardlücken und die kürzeste Antwort in Bytes gewinnt!
Beispiel 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
die dritte Position0 + 1 + 1
? ... und so eins mit den anderen?Antworten:
Boolfuck, 6 Bytes
Der Standard-Nummerntyp in Boolfuck ist ein bisschen. Angenommen, dies erstreckt sich auch auf die Eingangsnummern N und X, und wenn N> 0 ist, gibt es nur zwei mögliche Eingänge - 10 (der nichts ausgibt) und 11 (der 1 ausgibt).
,
Liest ein wenig in den aktuellen Speicherort. N wird ignoriert, da es 1 sein muss. Wenn X 0 ist, wird der Schleifenkörper (umgeben von[]
) übersprungen. Wenn X 1 ist, wird es ausgegeben und dann auf 0 gekippt, damit sich die Schleife nicht wiederholt.quelle
Python 2, 79 Bytes
Probieren Sie es online aus
quelle
exec"v=[sum(f[i-n:]),1][i<n];f+=[v];print v;i+=1;"*x
Pyth, 13
Test Suite
Trennt die Eingabezeile mit der
n
ersten.Erläuterung:
quelle
Haskell, 56 Bytes
Anwendungsbeispiel:
3 # 8
->[1,1,1,3,5,9,17,31]
.Wie es funktioniert
quelle
tail l
statt seininit l
?n
Elemente in der Liste. Es gibt keinen Unterschied zwischen Entfernen vom Ende und Hinzufügen zur Vorderseite und umgekehrt, dh Entfernen von der Vorderseite und Hinzufügen zum Ende, da die anfängliche Liste nur aus1
s besteht.++[]
durch zu ersetzen:
!Python 2, 55 Bytes
Verfolgt ein Längenfenster
n
der Sequenz in der Listel
, das aktualisiert wird, indem die Summe angehängt und das erste Element entfernt wird. Gibt das erste Element für jede Iteration ausx
.Ein anderer Ansatz zum Speichern aller Elemente und Summieren der letzten
n
Werte ergab die gleiche Länge (55).quelle
Javascript ES6 / ES2015,
107978580 BytesVielen Dank an @ user81655, @Neil und @ETHproductions für das Speichern einiger Bytes
versuche es online
Testfälle:
quelle
for
immer besser alswhile
,x.split('')
->[...x]
,~~a
->+a
,n-=1
->n--
, wenn Sie den gesamten Funktionskörper in einen einschließen,eval
brauchen Sie nicht zu schreibenreturn
. Auch noch kürzer als[...'1'.repeat(i)]
istArray(i).fill(1)
und man kann das~~
ausa
und entfernenb
. Und du darfst das entfernenf=
.(i,n)=>eval("for(l=Array(i).fill(1);n-->i;)l.push(l.slice(-i).reduce((a,b)=>a+b));l")
. Ich habe die Reihenfolge der Anweisungen geändert, die Argumenten--
inn-i
undl
aus kombiniert , um ein paar zusätzliche Bytes zu sparen.eval
Speicherung nicht;(i,n)=>{for(l=Array(i).fill(1);n-->i;)l.push(l.slice(-i).reduce((a,b)=>a+b));return l}
ist immer noch 85 Bytes.l.slice(-i).reduce((a,b)=>a+b)
=>eval(l.slice(-i).join`+`)
ES6, 66 Bytes
Leider
map
können Sie im Rückruf nicht auf das Ergebnisarray zugreifen.quelle
Gelee, 12 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
C ++ 11, 360 Bytes
Hallo, mir gefällt diese Frage. Ich weiß, dass C ++ eine sehr schwierige Sprache ist, um diesen Wettbewerb zu gewinnen. Aber ich werfe auf jeden Fall einen Cent.
Ich lasse dies als lesbare Erklärung des obigen Codes.
quelle
int
, entfernen Sie dieint
. Wenn Funktionen aufgerufen werdenfoo
, rufen Sie sie auff
. Sei brutal. ignoriere den Standard und nutze den Compiler aus. So golfen Sie.Haskell , 47 Bytes
Probieren Sie es online!
<$
Möglicherweise wurde Prelude eingeführt, nachdem diese Herausforderung veröffentlicht wurde.Haskell , 53 Bytes
Probieren Sie es online!
Definiert die Binärfunktion
?
, die wie folgt verwendet wird3?8 == [1,1,1,3,5,9,17,31]
.Die Hilfsfunktion
%
findet rekursiv dasi
th-Element dern
Bonacci-Sequenz durch Summieren der vorherigenn
Werte. Die Funktion?
tabelliert dann die erstenx
Werte von%
.quelle
%
"?i<=n
zui>n
.APL, 21
Dies ist eine Funktion, die n als linkes Argument und x als rechtes Argument verwendet.
Erläuterung:
Testfälle:
quelle
Python 3, 59
Dank FryAmTheEggman 20 Bytes gespart.
Keine großartige Lösung, aber es wird vorerst funktionieren.
Auch hier sind Testfälle:
quelle
Java, 82 + 58 = 140 Bytes
Funktion zum Ermitteln der i-ten n- Bonacci-Zahl ( 82 Bytes ):
Funktion zum Drucken der ersten k n -Bonacci-Zahl ( 58 Bytes ):
quelle
Brain-Flak ,
144124122 Bytes-20 Bytes dank Nitroden
Dies ist meine erste Brain-Flak-Antwort, und ich bin sicher, dass sie verbessert werden kann. Jede Hilfe wird geschätzt.
Probieren Sie es online!
quelle
Pari / GP , 46 Bytes
Die generierende Funktion der Sequenz ist:
Probieren Sie es online!
quelle
Julia, 78 Bytes
Dies ist eine Funktion, die zwei ganze Zahlen akzeptiert und ein ganzzahliges Array zurückgibt. Der Ansatz ist einfach: Generieren Sie ein Array mit einer Länge
n
, und vergrößern Sie das Array, indem Sie die Summe der vorherigenn
Elemente hinzufügen, bis das Array eine Länge hatx
.Ungolfed:
quelle
MATL , 22
26BytesDies verwendet die aktuelle Version (10.2.1) der Sprache / des Compilers.
Probieren Sie es online!
Ein paar zusätzliche Bytes :-( aufgrund eines Fehlers in der
G
Funktion ( Einfügeeingabe ; jetzt für die nächste Version korrigiert)Erläuterung
quelle
Perl 6 , 38 Bytes
Verwendungszweck:
quelle
C 132 Bytes
Der rekursive Ansatz ist um einige Bytes kürzer.
Ungolfed
quelle
Schale , 9 Bytes
Probieren Sie es online!
Beginnt , sich von der
B
ASE-1
Darstellung N (einfach eine Liste von N sind) und¡
teratively Summen (Σ
) , um die letzte (↑_
) N Elemente und fügt das Ergebnis an die Liste. Zum Schluss nimmt (↑
) die ersten X- Nummern in dieser Liste und gibt sie zurück.quelle
Ruby , 41 Bytes
Probieren Sie es online!
quelle
R , 68 Bytes
Probieren Sie es online!
quelle
K (NGN / k) ,
2624 BytesProbieren Sie es online!
quelle
Perl 6,
52 ~ 7247 ~ 67 BytesBenötigt das Modul
MONKEY-SEE-NO-EVAL
wegen des folgenden Fehlers:quelle
PHP , 78 Bytes
Probieren Sie es online!
-4 Bytes mit PHP> = 7.1
[,$n,$x]
anstelle vonlist(,$n,$x)
quelle
Jq 1,5 , 67 Bytes
Nimmt an, dass die Eingabe von N und X erfolgt, z
Erweitert
Probieren Sie es online!
quelle
J, 31 Bytes
Ungolfed:
Erläuterung
Lustige Zeiten mit dem Machtverb in seiner gerundeten Form :
Aufschlüsselung im Detail:
] {. ...
Nehmen Sie die ersten<right arg>
Elemente aus all diesen Dingen nach rechts, die die Arbeit erledigen ...<left> ^: <right>
Wenden Sie das Verb<left>
immer wieder<right>
mal ... wo<right>
durch die Mitte gerund angegeben in(-@[
](1 #~ [)
, das heißt]
, das heißt die rechte arg in die Funktion selbst übergeben. Also was ist<left>
? ...(] , [: +/ [ {. ])
Das linke Argument zu dieser ganzen Phrase wird zuerst durch das erste Gerund transformiert, dh-@[
. Das heißt, das linke Argument zu dieser Phrase ist das Negativ des linken Arguments zur Gesamtfunktion. Dies ist erforderlich, damit die Phrase[ {. ]
die letzten Elemente aus der Rückgabeliste übernimmt, die wir erstellen. Diese werden dann summiert:+/
. Und schließlich zu derselben Rückkehr Liste angefügt:] ,
.(1 #~ [)
- 1 "linkes Argument" mehrmals wiederholen.Probieren Sie es online!
quelle
Mathematica, 59 Bytes
Sie möchten wahrscheinlich
Clear@f
zwischen Funktionsaufrufen. Argumente sindn,x
, genau wie die Testfälle.quelle
Ordentlich , 36 Bytes
Probieren Sie es online!
Erläuterung
quelle
Japt , 18 Bytes
Probieren Sie es online!
Erläuterung:
quelle