Contexte
Pour ce défi, une `` métaséquence '' sera définie comme une séquence de nombres où non seulement les nombres eux-mêmes augmenteront, mais aussi l'incrément, et l'incrément augmentera d'une valeur croissante, etc.
Par exemple, la métaséquence de niveau 3 commencerait comme:
1 2 4 8 15 26 42 64 93 130 176
car:
1 2 3 4 5 6 7 8 9 >-|
↓+↑ = 7 | Increases by the amount above each time
1 2 4 7 11 16 22 29 37 46 >-| <-|
| Increases by the amount above each time
1 2 4 8 15 26 42 64 93 130 176 <-|
Défi
Étant donné un entier positif, affichez les vingt premiers éléments de la métaséquence de ce niveau.
Cas de test
Entrée: 3
Sortie:[ 1, 2, 4, 8, 15, 26, 42, 64, 93, 130, 176, 232, 299, 378, 470, 576, 697, 834, 988, 1160 ]
Entrée: 1
Sortie:[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 ]
Entrée: 5
Sortie:[ 1, 2, 4, 8, 16, 32, 63, 120, 219, 382, 638, 1024, 1586, 2380, 3473, 4944, 6885, 9402, 12616, 16664 ]
Entrée: 13
Sortie:[ 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16383, 32752, 65399, 130238, 258096, 507624 ]
Comme vous pouvez vous en rendre compte, les premiers éléments de chaque séquence de niveau sont les premiers pouvoirs de 2 ...
Règles
- Des échappatoires standard s'appliquent
- Il s'agit de code-golf , donc la réponse la plus courte en octets l'emporte
la source
0
, niveau 2 pour entrée1
, etc.)?Réponses:
Gelée ,
87 octetsEssayez-le en ligne!
Cela utilise la perspicacité de @ alephalpha que lameta-sequencen(i)=∑k=0n(ik).
la source
Wolfram Language (Mathematica) , 34 octets
Essayez-le en ligne!
La métaséquence de niveaun est la somme des n+1 premiers éléments de chaque ligne du triangle Pascal.
la source
Haskell , 34 octets
Utilise des entrées indexées 0 (
f 4
renvoie le niveau 5.)Haskell , 36 octets
Essayez-le en ligne! Utilise des entrées indexées 1 (
f 5
renvoie le niveau 5.)Explication
scanl (+) 1
est une fonction qui prend des sommes partielles d'une liste, en commençant par (et en ajoutant)1
.Il s'avère que le niveaun est juste cette fonction appliquée (n−1) fois à la liste [1,2,3,…] .
(Ou de manière équivalente:n fois à une liste de tous.)
Nous utilisons soit1 chaque application.
init
ou[1..20-n]
pour tenir compte de l'allongement de la liste enla source
[1..20-n]
ne va pas travailler pourtake 20.(iterate(scanl(+)1)[1..]!!)
ne coûterait qu'un octet de plus pour résoudre ce problème(iterate(init.scanl(+)1)[1..20]!!)
.Brain-Flak ,
8482 octetsEssayez-le en ligne!
Annoté
Essayez-le en ligne!
la source
R , 36 octets
Essayez-le en ligne!
Merci à @Giuseppe d'avoir suggéré
outer
.Ceci est basé sur l' approche @alephalpha décrite
la source
Map
au lieu de l'extérieur?Python 2 ,
695855 octetsOctets enregistrés grâce aux ovs et à Jo King ; aussi, cela fonctionne aussi dans Python 3 maintenant.
Essayez-le en ligne!
Les maths
Soita(t,n) le terme nth (indexé 0) de la séquence au niveau t . Une petite analyse conduit à la formule de récurrence suivante:
En travaillant en arrière, nous définissonsa(0,n)=1 et a(−1,n)=0 pour tout n . Ces définitions simplifieront notre scénario de base.
Le code
Nous définissons une fonction−1 devrait se comporter comme une séquence constante de tous les 0 « s.
m(t)
qui renvoie les 20 premiers éléments de la séquence au niveaut
. Sit
est non négatif, nous utilisons la formule récursive ci-dessus; sit
c'est le cas-1
, nous renvoyons une liste vide. La liste vide fonctionne comme un cas de base car le résultat de chaque appel récursif est découpé ([:n]
) puis additionné. Découper une liste vide donne une liste vide et additionner une liste vide donne0
. C'est exactement le résultat que nous voulons, car niveaula source
(t>=0)*range(20)
enregistre un octet, bien qu'il y ait probablement une expression encore plus courte.if~t
sauve deux de plus sur @xnordzaima / APL REPL, 14 octets
Essayez-le en ligne!
la source
1∘,
→1,
(≢↑(+\1∘,)⍣⎕)20⍴1
-s
indicateur).-s
btw (sauf si l'-s
indicateur repl?)Pari / GP , 39 octets
Essayez-le en ligne!
Pari / GP , 40 octets
Essayez-le en ligne!
la source
Perl 6 ,
3432 octets-2 octets grâce à Jo King
Essayez-le en ligne!
Explication
la source
$^a
lieu de$_
est nécessaire)$_
n'est pas défini lors de l'appel de la fonction. Je préfère les solutions qui ne dépendent pas de l'état des variables globales.Python 3.8 (pré-version) , 62 octets
Essayez-le en ligne!
Explication
la source
R (
6347 octets)Démo en ligne . Cela utilise la fonction bêta incomplète régularisée , qui donne la fonction de distribution cumulative d'un binôme, et a donc juste besoin d'un peu de mise à l'échelle pour donner des sommes partielles de lignes du triangle de Pascal.
Octave (
6646 octets)Démo en ligne . Exactement le même concept, mais un peu plus laid parce que
betainc
, contrairement aux Rpbeta
, les deuxième et troisième arguments doivent être supérieurs à zéro.Un grand merci à Giuseppe de m'avoir aidé à les vectoriser, avec des économies importantes.
la source
Rubis, 74 octets
a=->b{c=[1];d=0;b==1?c=(1..20).to_a: 19.times{c<<c[d]+(a[b-1])[d];d+=1};c}
Version non golfée:
Beaucoup de ressources - la version en ligne ne peut pas calculer la 13e métaséquence.
Essayez-le en ligne
la source
Wolfram Language (Mathematica) , 42 octets
Essayez-le en ligne!
la source
JavaScript (Node.js) , 58 octets
Essayez-le en ligne!
la source
05AB1E ,
119 octets0 indexé
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
.¥
!R ,
5949 octetsEssayez-le en ligne!
Récursivement
Reduce
avec+
,init=1
etaccumulation=TRUE
pour éviter d'avoir à sous-ensemble. Merci à Criminally Vulgar d' avoir suggéré l'approche récursive!la source
outer
quesapply
pour 36 octetscumsum
pendant un certain temps pour essayer de le faire fonctionner, mais c'estReduce
tellement lisse. Ravi de pouvoir également baisser l'indice de 1, je ne l'ai pas vu dans les commentaires.JavaScript (ES6),
6867 octetsEssayez-le en ligne!
JavaScript (ES6), 63 octets
NB: cette version fonctionne pourn ≤ 20 .
Essayez-le en ligne!
la source
J , 24 octets
Essayez-le en ligne!
REMARQUE: Il s'avère que c'est une traduction de la réponse APL de dzaima, bien que je ne l'ai pas remarqué avant d'écrire ceci.
explication
la source
Rubis, 49 octets
Définition récursive: le niveau 0 est
1,1,1,1...
et chaque niveau suivant est 1 suivi d'une séquence dont les premières différences sont le niveau précédent. De façon ennuyeuse, cela me donnerait 21 valeurs si je ne découpais pas explicitement les 20 premiers; semble qu'il devrait y avoir un moyen de raccourcir cela en évitant cela.la source
Rétine , 59 octets
Remplacez l'entrée par 19
1
s (en unaire). (La 20e valeur est 0 car elle est toujours supprimée lors du premier passage dans la boucle.)Répétez la boucle le nombre d'entrées d'origine.
Supprimer le dernier élément et préfixer un
1
.Calculez la somme cumulée.
Convertissez en décimal.
Essayez-le en ligne!
la source
C # (Visual C # Interactive Compiler) , 120 octets
Essayez-le en ligne!
Basé sur la formule d'alephalpha.
la source
Rouille , 135 octets
a utilisé l'idée de @alephalpha, comme plusieurs autres. il n'y a pas de factoriel intégré, ce qui prend au moins 36 octets (plus le traitement des négatifs). aucun choix intégré, 16 autres octets. itérateur-> type de vecteur déclaré, 20 octets .. etc etc.
Non golfé sur play.rust-lang.org
la source
min
:fn t(m:i64)->Vec<i64>{let b=|n,k|(1..=k).fold(1,|a,j|a*(n-j+1)/j);(0..20).map(|i|(0..=m).fold(0,|a,x|a+b(i,x))).collect()}
(122 octets)fn t(m:i64)->Vec<i64>{(0..20).map(|i|(0..=m).fold(0,|a,x|a+(1..=x).fold(1,|a,j|a*(i-j+1)/j))).collect()}
(104 octets). Ce qui serait bien, c'est de combiner les deux plis, mais je ne sais pas à quel point les tuples sont succincts.fn t(m:i64)->Vec<i64>{(0..20).map(|i|(0..=m).fold((0,1),|a,b|(a.0+a.1,a.1*(b-i)/!b)).0).collect()}
(98 octets)R (
6059 octets)Démo en ligne
Mise en œuvre simple de l'observation
à partir de OEIS A008949 . Les arguments pour
Reduce
sont la fonction (évidemment), le tableau sur lequel mapper, la valeur de départ, une valeur fausse (à replier de gauche plutôt que de droite), et une valeur vraie pour accumuler les résultats intermédiaires dans un tableau.la source
K (oK) , 17 octets
-1 octet grâce à ngn (passage de l'index 0 à l'index 1)
Essayez-le en ligne!
1 indexé
K (oK) , 18 octets
Essayez-le en ligne!
0 indexé
la source
1+!20
->20#1
Gelée , 10 octets
Essayez-le en ligne!
0 indexé.
la source
Perl 5, 48 octets
TIO
la source
Japt , 15 octets
Indexé 0; remplacer
h
parp
pour 1 indexé.Essayez-le
la source
CJam (20 octets)
Démo en ligne . C'est un programme qui prend l'entrée de stdin et imprime sur stdout; pour le même score, un bloc (fonction) anonyme peut être obtenu
Dissection
Cela applique la définition littéralement:
la source