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.


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:



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

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.

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

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


@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

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!


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 (+\⍵)
}



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


0

Gelée , 5 octets

;+\$¡

Essayez-le en ligne!

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


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))))
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.