Somme cumulée récursivement concaténée de [N] avec M itérations

14

Prenez deux nombres entiers positifs Net Mcréer les sommes cumulées concaténés de [N], avec des Mitérations. Affiche le résultat de la dernière itération.

Définition de la somme cumulée concaténée:

  1. Commencez par un nombre Net définissez une séquenceX = [N]
  2. Ajouter aux Xsommes cumulées deX
  3. Répétez l'étape 2 Mfois.

La somme cumulée d'un vecteur, X = [x1, x2, x3, x4]est: [x1, x1+x2, x1+x2+x3, x1+x2+x3+x4].

Exemple avec N = 1et M = 4:

P = la fonction de somme cumulée.

M = 0: [1]
M = 1: [1, 1]                    -  X = [1, P(1)] = [[1], [1]]      
M = 2: [1, 1, 1, 2]              -  X = [X, P(X)] = [[1, 1], [1, 2]]
M = 3: [1, 1, 1, 2, 1, 2, 3, 5]  -  X = [X, P(X)] = [[1, 1, 1, 2], [1, 2, 3, 5]]
M = 4: [1, 1, 1, 2, 1, 2, 3, 5, 1, 2, 3, 5, 6, 8, 11, 16]

Notez que le premier X = [1]n'est pas compté comme une itération. Vous pouvez choisir de prendre M = 5l'exemple ci-dessus (comptant ainsi X = [1]pour une seule itération).

C'est OEIS A107946


Cas de test:

N = 5, M = 1
5, 5

N = 2, M = 3
2, 2, 2, 4, 2, 4, 6, 10

N = 4, M = 6
4, 4, 4, 8, 4, 8, 12, 20, 4, 8, 12, 20, 24, 32, 44, 64, 4, 8, 12, 20, 24, 32, 44, 64, 68, 76, 88, 108, 132, 164, 208, 272, 4, 8, 12, 20, 24, 32, 44, 64, 68, 76, 88, 108, 132, 164, 208, 272, 276, 284, 296, 316, 340, 372, 416, 480, 548, 624, 712, 820, 952, 1116, 1324, 1596

C'est le , donc le code le plus court l'emporte. Formats d'entrée et de sortie facultatifs.

CG.
la source
C'est un peu trop tard maintenant, mais cela Najoute- t-il vraiment quelque chose au problème? C'est juste un facteur constant par lequel vous multipliez le résultat.
Martin Ender

Réponses:

7

Haskell , 35 octets

n!m=iterate((++)<*>scanl1(+))[n]!!m

Essayez-le en ligne!

Merci à H.PWiz pour -18 octets

Mego
la source
tail.scanl(+)0peut êtrescanl1(+)
H.PWiz
@ H.PWiz Merci, j'oublie toujours les *1versions de scanet fold.
Mego
45 octets
H.PWiz
1
35 octets en utilisantiterate
H.PWiz
Je vais juste laisser l'explication - trop d'efforts pour la changer à chaque fois: P
Mego
6

05AB1E , 7 octets

¸IFDηO«

Essayez-le en ligne!

Explication

¸         # wrap input_1 in a list
 IF       # input_2 times do:
   D      # duplicate the list
    η     # get prefixes of the list
     O    # sum the prefixes
      «   # concatenate to the current list
Emigna
la source
6

Husk , 9 8 7 octets

Merci à H.PWiz d'avoir économisé 1 octet.

!¡S+G+;

Essayez-le en ligne!

Utilise 1 base M.

Explication

      ;     Wrap N in a list to get [N].
 ¡          Iterate the following function on this list and collect
            the results in an infinite list.
  S+        Concatenate the current value with...
    G+      ...the cumulative sum. We're not using the cumsum built-in ∫ 
            because it prepends a zero.
!           Use M as an index into the infinite list.
Martin Ender
la source
C'était mon approche aussi, je ne sais pas si c'est jouable au golf. De plus, j'ai déjà suggéré de cumsumne pas renvoyer de début 0(ce qui économiserait 2 octets dans ce cas).
Erik the Outgolfer
Peut- ot∫être G+?
H.PWiz
@ H.PWiz Hmm ... les documents ne semblent pas clairs à ce sujet (AFAIK "scan" signifie "réduire" et non "réduire cumulativement").
Erik the Outgolfer
Fest de réduire est de réduire Gcumulativement
H.PWiz
5

MATL , 6 octets

:"tYsh

Les entrées sont M, alorsN .

Essayez-le en ligne! Ou vérifiez tous les cas de test .

Explication

:"      % Implicitly input M. Do the following M times
  t     %   Implicitly input N the first time. Duplicate
  Ys    %   Cumulative sum
  h     %   Concatenate horizontally
        % Implicitly end loop. Implicitly display stack
Luis Mendo
la source
3
Whaaaaat? Je suis sûr que j'ai essayé ça 100 fois. J'ai même essayé d'aller sur le site de Suever pour m'assurer qu'il ne s'agissait pas d'une erreur étrange sur TIO ... Je ne comprends pas du tout ...
Stewie Griffin
2
Je ne peux pas m'arrêter d'y penser ... Je suis absolument sûr d'avoir écrit ces caractères exacts encore et encore et essayé de les exécuter sur deux sites différents, sans succès. Comme cela ne peut pas être le cas, la seule explication qui reste est que je deviens fou ... Cela me dérange vraiment la tête!
Stewie Griffin
3

Python 2 , 83 78 75 71 65 63 60 octets

def f(n,m):r=n,;exec"s=0\nfor c in r:s+=c;r+=s,\n"*m;print r

Essayez-le en ligne!

Enregistré 6 8 octets grâce à Rod
Enregistré 3 octets grâce à Erik

TFeld
la source
@Rod Plus de remerciements: D
TFeld
Vous n'avez pas besoin de [:], rc'est un tuple.
Erik the Outgolfer
@EriktheOutgolfer, merci, c'est un reste de quand r était une liste
TFeld
3

Dyalog APL , 12 octets

{(⊢,+\)⍣⍺⊢⍵}

Prend N sur le côté droit et M sur la gauche. TryAPL ici!

Explication:

{(⊢,+\)⍣⍺⊢⍵}
{          } an anonymous function
 (⊢,+\)      a train for a single iteration:
             the right argument
   ,          concatenated with
    +\        the cumulative sum 
            repeated
             left argument times
         ⊢⍵  on the right argument
dzaima
la source
J'adore l'explication. Très clair ce qui se passe. Difficile à comprendre APL autrement: P
Emigna
2

Java (OpenJDK 8) , 194 181 175 163 134 134 110 octets

(n,m)->{int a[]=new int[1<<m],c=1,i;for(a[0]=n;m-->0;)for(n=0;2*n<c;c++)for(i=++n;i-->0;a[c]+=a[i]);return a;}

Essayez-le en ligne!

Roberto Graham
la source
2
110 octets:(n,m)->{int a[]=new int[1<<m],c=1,i;for(a[0]=n;m-->0;)for(n=0;2*n<c;c++)for(i=++n;i-->0;a[c]+=a[i]);return a;}
Nevay
1

Dyalog APL , 19 octets

{0=⍺:⍵⋄(⍺-1)∇⍵,+\⍵}

Essayez-le en ligne!

Fonction dyadique, avec Nà droite et Mà gauche.

{
    0=⍺: ⍵         ⍝ if a = 0 return
    (⍺-1) ∇ ⍵,+\⍵  ⍝ recurse with the array
                   ⍝ joined with its cumsum (+\⍵)
}
Uriel
la source
1

R , 46 octets

function(N,M){for(i in 1:M)N=c(N,cumsum(N))
N}

Essayez-le en ligne!

Giuseppe
la source
0

JavaScript (ES6), 55 54 octets

Prend des entrées dans la syntaxe de curry (m)(n).

m=>g=a=>m--?g([...a=+a?[a]:a,...a.map(x=>s+=x,s=0)]):a

Cas de test

Arnauld
la source
0

Gelée , 5 octets

;+\$¡

Essayez-le en ligne!

Version suggérée par Dennis (renvoie nau lieu de [n]pour les tableaux singleton).

Erik le Outgolfer
la source
Wet peut être retiré.
Dennis
@Dennis J'ai peur que la sortie ne soit pas correcte alors? J'y ai pensé mais si j'obtiens des entrées 1et 0j'ai peur de revenir 1au lieu de les [1]supprimer, et je ne peux pas utiliser un programme complet à la place, car sa sortie serait toujours comme ça.
Erik the Outgolfer
1est la façon dont Jelly affiche le tableau [1]. Je n'y vois aucun problème.
Dennis
@ Dennis Hmm ... un peu méfiant à ce sujet (comme je l'ai dit dans la dernière partie de mon commentaire ci-dessus) ... y a-t-il un consensus le permettant, ou cela compterait-il comme "types de données standard abusant des échappatoires"?
Erik the Outgolfer
Les deux formats sont corrects.
CG.
0

Clojure, 67 octets

#(loop[c[%]i %2](if(= i 0)c(recur(into c(reductions + c))(dec i))))
NikoNyrh
la source