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.


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:



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

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.

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

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

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

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!


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



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


0

Gelee , 5 Bytes

;+\$¡

Probieren Sie es online!

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


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))))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.