Ce n'est pas très connu, mais ce que nous appelons la séquence de Fibonacci, AKA
1, 1, 2, 3, 5, 8, 13, 21, 34...
est en fait appelé la séquence de Duonacci . En effet, pour obtenir le nombre suivant, vous devez additionner les 2 chiffres précédents. Il y a aussi la séquence Tribonacci ,
1, 1, 1, 3, 5, 9, 17, 31, 57, 105, 193, 355, 653, 1201...
car le nombre suivant est la somme des 3 derniers chiffres. Et la séquence de Quadronacci
1, 1, 1, 1, 4, 7, 13, 25, 49, 94, 181, 349, 673...
Et la séquence favorite de tous, la séquence Pentanacci :
1, 1, 1, 1, 1, 5, 9, 17, 33, 65, 129...
Et la séquence d' Hexanacci , la séquence de Septanacci , la séquence d' Octonacci , etc. et ainsi de suite jusqu'à la séquence de N-Bonacci.
La séquence N-bonacci commencera toujours par N 1 sur une ligne.
Le défi
Vous devez écrire une fonction ou un programme qui prend deux nombres N et X et imprime les premiers nombres X N-Bonacci. N sera un nombre entier supérieur à 0, et vous pouvez sans risque supposer qu'aucun nombre N-Bonacci ne dépassera le type de nombre par défaut dans votre langue. La sortie peut être dans n'importe quel format lisible par l'homme, et vous pouvez prendre les entrées de toute manière raisonnable. (Arguments de ligne de commande, arguments de fonction, STDIN, etc.)
Comme d'habitude, il s'agit de Code-golf, donc les échappatoires standard s'appliquent et la réponse la plus courte en octets l'emporte!
Échantillon 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
comme la troisième position0 + 1 + 1
? ... et ainsi l'un avec les autres?Réponses:
Boolfuck, 6 octets
Le type de numéro par défaut dans Boolfuck est un peu. En supposant que cela s’applique également aux nombres d’entrée N et X, et étant donné que N> 0, il n’ya que deux entrées possibles: 10 (qui n’émet rien) et 11 (qui émet 1).
,
lit un bit dans l’emplacement mémoire actuel. N est ignoré, comme il doit l'être 1. Si X est égal à 0, le corps de la boucle (entouré de[]
) est ignoré. Si X est 1, il est émis puis basculé à 0 pour que la boucle ne se répète pas.la source
Python 2, 79 octets
Essayez-le en ligne
la source
exec"v=[sum(f[i-n:]),1][i<n];f+=[v];print v;i+=1;"*x
Pyth, 13
Suite de tests
Prend l’entrée nouvelle ligne séparée, avec la
n
première.Explication:
la source
Haskell, 56 octets
Exemple d'utilisation:
3 # 8
->[1,1,1,3,5,9,17,31]
.Comment ça fonctionne
la source
tail l
place deinit l
?n
éléments dans la liste. Il n'y a pas de différence entre supprimer de la fin et ajouter au début et dans l'autre sens, c'est-à-dire supprimer de l'avant et ajouter à la fin, car la liste initiale est composée uniquement de1
s.++[]
par:
!Python 2, 55 octets
Suit une
n
fenêtre de longueur de la séquence dans la listel
, mise à jour en ajoutant la somme et en supprimant le premier élément. Imprime le premier élément à chaque itération pour lesx
itérations.Une approche différente consistant à stocker tous les éléments et à résumer les derniers
n
valeurs a donné la même longueur (55).la source
Javascript ES6 / ES2015,
107978580 octetsMerci à @ user81655, @Neil et @ETHproductions pour économiser quelques octets
essayez-le en ligne
Cas de test:
la source
for
est toujours mieux quewhile
,x.split('')
->[...x]
,~~a
->+a
,n-=1
->n--
, si vous insérez le corps entier de la fonction dans uneval
élément que vous n'avez pas besoin d'écrirereturn
. En outre, même plus court que ce qui[...'1'.repeat(i)]
estArray(i).fill(1)
et vous pouvez supprimer le~~
dea
etb
. Et vous êtes autorisé à supprimer lef=
.(i,n)=>eval("for(l=Array(i).fill(1);n-->i;)l.push(l.slice(-i).reduce((a,b)=>a+b));l")
. J'ai changé l'ordre des instructions, combiné len--
dansn-i
et supprimél
des arguments pour enregistrer quelques octets supplémentaires.eval
économies;(i,n)=>{for(l=Array(i).fill(1);n-->i;)l.push(l.slice(-i).reduce((a,b)=>a+b));return l}
est toujours 85 octets.l.slice(-i).reduce((a,b)=>a+b)
=>eval(l.slice(-i).join`+`)
ES6, 66 octets
Malheureusement
map
, vous ne pourrez pas accéder au tableau de résultats dans le rappel.la source
Gelée, 12 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
C ++ 11, 360 octets
Salut j'aime juste cette question. Je sais que c ++ est un langage très difficile à gagner pour ce concours. Mais je vais jeter un centime de toute façon.
Je laisserai ceci comme l'explication lisible du code ci-dessus.
la source
int
s, supprimez leint
. Si des fonctions sont appeléesfoo
, appelez-lesf
. Être brutal; ignorer la norme et exploiter le compilateur. C'est comme ça que vous jouez au golf.Haskell , 47 octets
Essayez-le en ligne!
<$
aurait pu être introduit dans Prelude après la publication de ce défi.Haskell , 53 octets
Essayez-le en ligne!
Définit la fonction binaire
?
, utilisée comme3?8 == [1,1,1,3,5,9,17,31]
.La fonction auxiliaire
%
trouve récursivement lei
e élément de lan
séquence de -bonacci en faisant la somme desn
valeurs précédentes . Ensuite, la fonction?
tabule les premièresx
valeurs de%
.la source
%
"?i<=n
eni>n
.APL, 21
C'est une fonction qui prend n comme argument de gauche et x comme argument de droite.
Explication:
Cas de test:
la source
Python 3, 59
Économisé 20 octets grâce à FryAmTheEggman.
Pas une bonne solution, mais ça va marcher pour le moment.
Aussi, voici des cas de test:
la source
Java, 82 + 58 = 140 octets
Fonction pour trouver le ième n nombre -bonacci ( 82 octets ):
Fonction pour imprimer le premier numéro k n -bonacci ( 58 octets ):
la source
Brain-Flak ,
144124122 octets-20 octets grâce à Nitroden
C’est ma première réponse à Brain-Flak, et je suis sûr qu’elle peut être améliorée. Toute aide est appréciée.
Essayez-le en ligne!
la source
Paris / GP , 46 octets
La fonction génératrice de la séquence est:
Essayez-le en ligne!
la source
Julia, 78 octets
C'est une fonction qui accepte deux entiers et retourne un tableau d'entiers. L’approche est simple: générez un tableau de longueurs
n
, puis agrandissez-le en ajoutant la somme desn
éléments précédents jusqu’à ce que le tableau ait une longueurx
.Ungolfed:
la source
MATL , 22
26octetsCeci utilise la version actuelle (10.2.1) du langage / compilateur.
Essayez-le en ligne!
Quelques octets supplémentaires :-( dus à un bogue dans la
G
fonction (coller l'entrée; corrigé pour la prochaine version)Explication
la source
Perl 6 , 38 octets
Usage:
la source
C, 132 octets
L'approche récursive est plus courte de quelques octets.
Ungolfed
la source
Coque , 9 octets
Essayez-le en ligne!
Commence à partir de la représentation
B
ase1
de N (simplement une liste de N ) et¡
additionne de manière approximative (Σ
) les derniers (↑_
) N éléments et ajoute le résultat à la liste. Enfin, prend (↑
) les X premiers nombres de cette liste et les retourne.la source
Ruby , 41 octets
Essayez-le en ligne!
la source
R , 68 octets
Essayez-le en ligne!
la source
K (ngn / k) ,
26 à24 octetsEssayez-le en ligne!
la source
Perl 6,
52 ~ 7247 ~ 67 octetsRequiert le module à
MONKEY-SEE-NO-EVAL
cause de l'erreur suivante:la source
PHP , 78 octets
Essayez-le en ligne!
-4 octets avec PHP> = 7.1
[,$n,$x]
au lieu delist(,$n,$x)
la source
Jq 1.5 , 67 octets
Suppose que les entrées fournies par N et X, par exemple
Étendu
Essayez-le en ligne!
la source
J, 31 octets
Ungolfed:
explication
Des moments amusants avec le verbe puissant sous sa forme générale :
Ventilation en détail:
] {. ...
Prenez<right arg>
à droite les premiers éléments de tous ces trucs qui font le travail ...<left> ^: <right>
applique le verbe à<left>
plusieurs<right>
reprises fois ... où<right>
est spécifié par le milieu moyen dans(-@[
](1 #~ [)
, c'est-à]
-dire que l'argument de droite est passé à la fonction elle-même. Donc qu'est-ce<left>
? ...(] , [: +/ [ {. ])
L'argument de gauche de cette phrase entière est d'abord transformé par le premier gérond, c'est-à-dire-@[
. Cela signifie que l'argument de gauche de cette phrase est le négatif de l'argument de gauche de la fonction globale. Cela est nécessaire pour que la phrase[ {. ]
prenne les derniers éléments de la liste de retour que nous construisons. Ceux-ci sont ensuite résumés:+/
. Et finalement ajouté à cette même liste de retour:] ,
.(1 #~ [)
- Répétez 1 "partie gauche" plusieurs fois.Essayez-le en ligne!
la source
Mathematica, 59 octets
Vous voudrez probablement
Clear@f
entre les appels de fonction. Les arguments sontn,x
, tout comme les cas de test.la source
Rangée , 36 octets
Essayez-le en ligne!
Explication
la source
Japt , 18 octets
Essayez-le en ligne!
Explication:
la source