Rekursiv verkettete kumulative Summen von [N] mit M-Iterationen

14

Nehmen Sie zwei positive ganze Zahlen Nund Merstellen Sie die verketteten kumulativen Summen von [N]mit MIterationen. Das Ergebnis der letzten Iteration ausgeben.

Definition der verketteten kumulativen Summe:

  1. Beginnen Sie mit einer Zahl Nund definieren Sie eine SequenzX = [N]
  2. An Xdie kumulierten Summen von anhängenX
  3. Wiederholen Sie Schritt 2 Mmal.

Die kumulative Summe eines Vektors X = [x1, x2, x3, x4]ist: [x1, x1+x2, x1+x2+x3, x1+x2+x3+x4].

Beispiel mit N = 1und M = 4:

P = die kumulative Summenfunktion.

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]

Beachten Sie, dass die erste X = [1]nicht als Iteration gezählt wird. Sie können sich M = 5für das obige Beispiel entscheiden (also X = [1]als eine Iteration zählen).

Dies ist OEIS A107946


Testfälle:

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

Das ist , also gewinnt der kürzeste Code. Optionale Eingabe- und Ausgabeformate.

CG.
quelle
Es ist jetzt ein bisschen zu spät, aber trägt Nwirklich etwas zum Problem bei? Es ist nur ein konstanter Faktor, mit dem Sie das Ergebnis multiplizieren.
Martin Ender

Antworten:

7

Haskell , 35 Bytes

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

Probieren Sie es online!

Vielen Dank an H.PWiz für -18 Bytes

Mego
quelle
tail.scanl(+)0kann seinscanl1(+)
H.PWiz
@ H.PWiz Danke, ich vergesse immer die *1Versionen von scanund fold.
Mego
45 Bytes
H.PWiz
1
35 Bytes mititerate
H.PWiz
Ich werde die Erklärung einfach weglassen - zu viel Aufwand, um sie jedes Mal zu ändern: P
Mego
6

05AB1E , 7 Bytes

¸IFDηO«

Probieren Sie es online!

Erläuterung

¸         # 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
quelle
6

Schale , 9 8 7 Bytes

Vielen Dank an H.PWiz für das Speichern von 1 Byte.

!¡S+G+;

Probieren Sie es online!

Verwendet 1-basiert M.

Erläuterung

      ;     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
quelle
War mein Ansatz auch, ich bin mir nicht sicher, ob es golffähig ist. Außerdem habe ich bereits vorgeschlagen , für cumsumkeine führend zurückzukehren 0(etwas , das 2 Bytes in diesem Fall sparen würde).
Erik der Outgolfer
Kann ot∫sein G+?
H.PWiz
@ H.PWiz Hmm ... die docs scheinen diesbezüglich unklar zu sein (AFAIK "scan" bedeutet "verkleinern" nicht "kumulativ verkleinern").
Erik the Outgolfer
Fist reduzieren Gist kumulativ reduzieren
H.PWiz
5

MATL , 6 Bytes

:"tYsh

Eingänge sind Mdann N.

Probieren Sie es online! Oder überprüfen Sie alle Testfälle .

Erläuterung

:"      % 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
quelle
3
Wie bitte? Ich bin sicher, dass ich das 100 Mal versucht habe. Ich habe sogar versucht, zu Suever zu gehen, um sicherzustellen, dass es sich nicht um einen merkwürdigen Fehler bei TIO handelt ... Ich verstehe das überhaupt nicht ...
Stewie Griffin
2
Ich kann nicht aufhören, darüber nachzudenken ... Ich bin mir absolut sicher, dass ich diese genauen Zeichen immer wieder geschrieben und versucht habe, sie auf zwei verschiedenen Sites auszuführen, ohne Erfolg. Da dies nicht der Fall sein kann, bleibt nur die Erklärung, dass ich verrückt werde ... Das bringt meinen Kopf durcheinander!
Stewie Griffin
3

Python 2 , 83 78 75 71 65 63 60 Bytes

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

Probieren Sie es online!

Gespeichert 6 8 Bytes dank Rod
Saved 3 Bytes dank Erik

TFeld
quelle
@ Rod Mehr Dank: D
TFeld
Du brauchst das nicht [:], rist a tuple.
Erik the Outgolfer
@EriktheOutgolfer, danke, es ist ein Überbleibsel aus der Zeit als r eine Liste war
TFeld
3

Dyalog APL , 12 Bytes

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

Nimmt N auf der rechten Seite und M auf der linken Seite. TryAPL hier!

Erläuterung:

{(⊢,+\)⍣⍺⊢⍵}
{          } 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
quelle
Liebe die Erklärung. Sehr klar, was los ist. Schwer zu verstehende APL ansonsten: P
Emigna
2

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

(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;}

Probieren Sie es online!

Roberto Graham
quelle
2
110 Bytes:(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 Bytes

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

Probieren Sie es online!

Dyadische Funktion mit Nrechts und Mlinks.

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

R , 46 Bytes

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

Probieren Sie es online!

Giuseppe
quelle
0

JavaScript (ES6), 55 54 Byte

Übernimmt Eingaben in der Currying-Syntax (m)(n).

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

Testfälle

Arnauld
quelle
0

Gelee , 5 Bytes

;+\$¡

Probieren Sie es online!

Vorgeschlagene Version von Dennis (wird nanstelle von [n]Singleton-Arrays zurückgegeben).

Erik der Outgolfer
quelle
Wund kann entfernt werden.
Dennis
@ Tennis Ich fürchte, die Ausgabe wird dann nicht richtig sein? Ich habe darüber nachgedacht, aber wenn ich Eingaben erhalte 1und 0Angst habe, dass ich zurückkomme, 1anstatt [1]diese zu entfernen, und ich kann stattdessen kein vollständiges Programm verwenden, da die Ausgabe immer noch so wäre.
Erik der Outgolfer
1zeigt Jelly das Array an [1]. Ich sehe kein Problem damit.
Dennis
@Dennis Hmm ... ein bisschen misstrauisch (wie ich oben im letzten Teil meines Kommentars gesagt habe) ... gibt es einen Konsens, der dies zulässt, oder würde es als "Standarddatentyp für den Missbrauch von Lücken" gelten?
Erik der Outgolfer
Beide Formate sind in Ordnung.
CG.
0

Clojure, 67 Bytes

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