Défi
Écrivez une fonction / un programme qui génère soit le n
'e élément, soit les premiers n
éléments, dans la séquence de nombres bien connue:
1, 2, 4, 8, 16 ...
Oh, attendez ... J'ai oublié les premiers chiffres:
1, 1, 1, 1, 2, 4, 8, 16 ...
Heck, je vais ajouter quelques autres pour faire bonne mesure:
1, 1, 1, 1, 2, 4, 8, 16, 33, 69, 146, 312, 673, 1463, 3202, 7050, 15605, 34705 ...
Les nombres sont des nombres catalans généralisés donnés par la formule (indexée zéro):
où
Il s'agit d' OEIS A004149 .
Vous pouvez choisir si vous souhaitez que la séquence soit indexée à zéro ou à un. La séquence doit bien sûr être la même, vous devez donc réécrire la formule si vous l'avez à un index.
a(n-1-k)
àa(n-k)
, n'est -ce pas?Réponses:
Python , 51 octets
Essayez-le en ligne!
Simplifie un peu la formule:
la source
Perl 6 , 44 octets
Essayez-le en ligne!
Bloc de code anonyme qui renvoie une séquence de valeurs infinie paresseuse. Cela implémente à peu près la séquence telle que décrite, avec le raccourci qu'il multiplie par zip tous les éléments jusqu'à présent après le deuxième élément avec l'inverse de la liste à partir du quatrième élément et en ajoutant un supplémentaire
1
à la fin.Explication:
la source
05AB1E ,
141311 octetsEssayez-le en ligne!
Génère le nième élément, indexé 0.
la source
JavaScript (ES6), 42 octets
Un port de la solution de xnor .
0 indexé.
Essayez-le en ligne!
JavaScript (ES6),
8375 octetsUne solution plus rapide, moins récursive, mais nettement plus longue.
0 indexé.
Essayez-le en ligne!
la source
Haskell,
494339 octetsEssayez-le en ligne!
Pour
n<3
lesum
est 0, le faitmax ... 1
monter à1
.Edit: -6 octets grâce à @Jo King.
la source
Wolfram Language (Mathematica) , 36 octets
Essayez-le en ligne!
1 indexé.
La séquence 2-indexée est de 4 octets plus courte:
Sum[#0@i#0[#-i],{i,#-4}]/. 0->1&
. Essayez-le en ligne!la source
CatalanNumber
!05AB1E ,
1713 octetsPas plus court que la réponse 05AB1E existante , mais je voulais essayer la fonctionnalité récursive de la nouvelle version 05AB1E comme pratique pour moi-même.
Pourrait peut-être être joué par quelques octets.EDIT: Et il peut en effet, voir la version récursive de @Grimy réponse 05AB1E s » ci - dessous, qui est de 13 octets .Sort le premiern articles: Essayez-le en ligne .
Pourrait être changé en base 0n 'e élément lors du remplacement
£
parè
: Essayez-le en ligne ;ou une liste infinie en supprimant
£
: Essayez-le en ligne .Explication:
Cela implémente la formule utilisée dans la description du défi comme ceci:
a ( n ) = a ( n - 1 ) + ∑n - 1k = 2( a ( k ) ⋅ a ( n - 1 - k ) )
Version 13 octets de @Grimy (assurez-vous de voter pour sa réponse si vous ne l'avez pas encore fait):
Sort le premiern items: Try it online.
Can again be changed to 0-based indexing or an infinite list instead:a(0)=1 by default.)
- (0-based) indexing
1λèλ1šÂ¨¨¨øPO
: Try it online;- Infinite list
λλ1šÂ¨¨¨øPO
: Try it online. (Note that 2 bytes are saved here instead of 1, because the recursive environment starts withExplanation:
This instead implements the formula found by @xnor for his Python answer like this:
a(n)=∑n−1k=2(a(k)⋅a(n−2−k))
la source
n=100
in 0.65 seconds, but when I disable lazy-loading, it will time out after 60 seconds instead, even forn=25
.Python 3, 59 bytes
really inefficient,
a(13)
doesn't finish on TIO.Try it online!
la source
Jelly, 17 bytes
Try it online!
A monadic link taking the zero-indexedn and returning the list of generalized Catalan numbers from 0 to n .
la source
Haskell, 76 bytes
Try it online!
la source
APL (Dyalog Extended), 34 bytesSBCS
-2 thanks to dzaima.
Anonymous prefix lambda.
Try it online!
la source
Japt,
191716 bytesOutputs the
n
th term, 1-indexed.Try it
la source
Haskell, 65 bytes
Try it online!
You can use either
f
to get a single element of a sequence, or pass a list of values tog
and get all the indexes for that list.la source
Forth (gforth),
9981 bytesTry it online!
Output is nth term and input is 1-indexed
Edit: Saved 17 bytes by switching to xnor's formula. Saved another 1 byte by using 1-indexed
Code Explanation
la source
Charcoal, 26 bytes
Try it online! Link is to verbose version of code. Prints the 0-indexed nth number, although it calculates using 1-indexing internally. Explanation:
Start with
a[0] = a[1] = a[2] = a[3] = a[4] = 1
. Yes, this is 1-indexed, but then with an extra zeroth value. That's code golf for you.Calculate an additional
n
terms. This is overkill, but it makes finding the desired term easier whenn<5
.For each term, compute the next term as the sum of the terms so far termwise multiplied by the reverse of the terms so far, excluding three terms.
This is a no-op used to trick Charcoal into parsing the 2-argument form of
Slice
, otherwise I would have to use a less golfy way of removing three terms.Output the 4th last term.
la source
Pyth, 30 bytes
Try it online!
Returns the firstn elements of the sequence.
Alternative: Replacen -th element of the sequence, 0-indexed.
<
with@
to return thela source
Ruby,
4241 bytesTry it online!
1-indexed (to save 1 byte)
la source
Octave, 73 bytes
Try it online!
-2 bytes thanks to Stewie Griffin. Once more, the imperative approach wins over the functional recursive approach. That one is shown below.
Octave, 75 bytes
Try it online!
Captcha wanted to verify I was a human when posting this. To be honest, I'm not so sure.
la source
n<4
.Perl 5
-MList::Util=sum
, 61 bytesTry it online!
la source
C/C++,
706967 bytes-1 bytes thanks to Jonathan.
Try it online!
la source
a(n-1-k)
bea(n+~k)
?a(++k)*a(n-k)
is likely to work, and it drops further 2 bytes fromfor
. But I smell undefined behavior.