Somme cumulative concatenate ricorsivamente di [N] con M iterazioni


14

Prendete due interi positivi Ned Me creare le somme cumulative concatenati di [N], con Miterazioni. Emette il risultato dell'ultima iterazione.

Definizione della somma cumulativa concatenata:

  1. Inizia con un numero Ne definisci una sequenzaX = [N]
  2. Aggiungi alle Xsomme cumulative diX
  3. Ripetere il passaggio 2 Mvolte.

La somma cumulativa di un vettore, X = [x1, x2, x3, x4]è: [x1, x1+x2, x1+x2+x3, x1+x2+x3+x4].

Esempio con N = 1e M = 4:

P = la funzione di somma cumulativa.

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]

Si noti che il primo X = [1]non viene conteggiato come iterazione. Puoi scegliere di prendere M = 5l'esempio sopra (contando così X = [1]come una iterazione).

Questo è OEIS A107946


Casi 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

Questo è , quindi vince il codice più corto. Formati di input e output opzionali.


Adesso è un po 'troppo tardi, ma Naggiunge davvero qualcosa al problema? È solo un fattore costante per cui moltiplichi il risultato.
Martin Ender,

Risposte:



6

05AB1E , 7 byte

¸IFDηO«

Provalo online!

Spiegazione

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

Buccia , 9 8 7 byte

Grazie a H.PWiz per aver salvato 1 byte.

!¡S+G+;

Provalo online!

Utilizza 1 basato M.

Spiegazione

      ;     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.

Era anche il mio approccio, non sono sicuro che sia golfabile. Inoltre, ho già suggerito di cumsumnon restituire un comando 0(qualcosa che in questo caso risparmierebbe 2 byte).
Erik the Outgolfer,

Può ot∫essere G+?
H.Piz,

@ H.PWiz Hmm ... i documenti sembrano non essere chiari su questo (AFAIK "scan" significa "ridurre" non "ridurre cumulativamente").
Erik the Outgolfer,

Fè ridurre è ridurre Gcumulativamente
H.Pwiz

5

MATL , 6 byte

:"tYsh

Gli input sono M, quindi N.

Provalo online! Oppure verifica tutti i casi di test .

Spiegazione

:"      % 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? Sono sicuro di averlo provato 100 volte. Ho anche provato ad andare sul sito di Suever per assicurarmi che non ci fosse uno strano errore su TIO ... Non lo capisco affatto ...
Stewie Griffin,

2
Non riesco a smettere di pensarci ... Sono assolutamente sicuro di aver scritto quei caratteri esatti ancora e ancora e ho provato a farlo funzionare su due siti diversi, senza successo. Dal momento che non può essere così, l'unica spiegazione rimasta è che sto impazzendo ... Questo mi fa davvero impazzire!
Stewie Griffin,


3

Python 2 , 83 78 75 71 65 63 60 byte

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

Provalo online!

Salvato 6 8 byte grazie a Rod
Salvato 3 byte grazie a Erik


@Rod Altro grazie: D
TFeld

Non è necessario il [:], rè un tuple.
Erik the Outgolfer,

@EriktheOutgolfer, grazie, è rimasto da quando r era un elenco
TFeld

3

Dyalog APL , 12 byte

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

Prende N sul lato destro e M sul lato sinistro. Prova APL qui!

Spiegazione:

{(⊢,+\)⍣⍺⊢⍵}
{          } 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

Adoro la spiegazione. Molto chiaro cosa sta succedendo. Difficile capire APL altrimenti: P
Emigna,

2

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

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

Provalo online!


2
110 byte:(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 byte

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

Provalo online!

Funzione diadica, con Na destra e Ma sinistra.

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



0

JavaScript (ES6), 55 54 byte

Accetta input nella sintassi del curry (m)(n).

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

Casi test


0

Gelatina , 5 byte

;+\$¡

Provalo online!

Versione suggerita da Dennis (ritorna ninvece che [n]per le matrici singleton).


We può essere rimosso.
Dennis,

@Dennis Temo che l'output non sarà giusto allora? Ci ho pensato, ma se ricevo input 1e 0temo che tornerò 1invece [1]che rimuoverli, e non posso invece utilizzare un programma completo, poiché il suo output sarebbe ancora così.
Erik the Outgolfer,

1è come Jelly visualizza l'array [1]. Non vedo alcun problema con questo.
Dennis,

@Dennis Hmm ... un po 'sospetto (come ho detto nell'ultima parte del mio commento sopra) ... c'è qualche consenso che lo consente, o conterebbe come "scappatoia standard che abusa di tipi di dati"?
Erik the Outgolfer,

Entrambi i formati sono ok.
CG.

0

Clojure, 67 byte

#(loop[c[%]i %2](if(= i 0)c(recur(into c(reductions + c))(dec i))))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.