Sumas acumuladas recursivamente concatenadas de [N] con iteraciones M

14

Tomar dos números enteros positivos Ny My crear las sumas acumuladas de concatenados [N], con Miteraciones. Salida del resultado de la última iteración.

Definición de la suma acumulada concatenada:

  1. Comience con un número Ny defina una secuenciaX = [N]
  2. Anexar a Xlas sumas acumuladas deX
  3. Repita el paso 2 Mveces.

La suma acumulada de un vector, X = [x1, x2, x3, x4]es: [x1, x1+x2, x1+x2+x3, x1+x2+x3+x4].

Ejemplo con N = 1y M = 4:

P = la función de suma acumulativa.

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]

Tenga en cuenta que el primero X = [1]no se cuenta como una iteración. Puede optar M = 5por el ejemplo anterior (por lo tanto, contar X = [1]como una iteración).

Esta es OEIS A107946


Casos de prueba:

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

Este es el , por lo que gana el código más corto. Formatos opcionales de entrada y salida.

CG
fuente
Es un poco tarde ahora, pero ¿ Nrealmente agrega algo al problema? Es solo un factor constante por el que multiplicas el resultado.
Martin Ender

Respuestas:

7

Haskell , 35 bytes

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

Pruébalo en línea!

Gracias a H.PWiz por -18 bytes

Mego
fuente
tail.scanl(+)0puede serscanl1(+)
H.PWiz
@ H.PWiz Gracias, siempre me olvido de las *1versiones de scany fold.
Mego
45 bytes
H.PWiz
1
35 bytes usandoiterate
H.PWiz
Solo voy a dejar de lado la explicación: demasiado esfuerzo para cambiarla cada vez: P
Mego
6

05AB1E , 7 bytes

¸IFDηO«

Pruébalo en línea!

Explicación

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

Casco , 9 8 7 bytes

Gracias a H.PWiz por guardar 1 byte.

!¡S+G+;

Pruébalo en línea!

Utiliza 1 basado M .

Explicación

      ;     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
fuente
Fue mi enfoque también, no estoy seguro si es golfable. Además, ya he sugerido que cumsumno devuelva un inicio 0(algo que ahorraría 2 bytes en este caso).
Erik the Outgolfer
Puede ot∫ser G+?
H.PWiz
@ H.PWiz Hmm ... los documentos parecen no estar claros sobre eso (AFAIK "escanear" significa "reducir" no "reducir acumulativamente").
Erik the Outgolfer
Fes reducir Ges
acumular
5

MATL , 6 bytes

:"tYsh

Las entradas son M, entonces N.

Pruébalo en línea! O verificar todos los casos de prueba .

Explicación

:"      % 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
fuente
3
¿Qué? Estoy seguro de que lo he intentado 100 veces. Incluso intenté ir al sitio de Suever para asegurarme de que no fuera un error extraño en TIO ... No entiendo esto en absoluto ...
Stewie Griffin
2
No puedo dejar de pensar en esto ... Estoy absolutamente seguro de que he escrito esos caracteres exactos una y otra vez e intenté ejecutarlo en dos sitios diferentes, sin éxito. Como ese no puede ser el caso, la única explicación que queda es que me estoy volviendo loco ... ¡Esto realmente me molesta!
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

Pruébalo en línea!

Guardado 6 8 bytes gracias a Rod
Guardado 3 bytes gracias a Erik

TFeld
fuente
@ Rod Más gracias: D
TFeld
No necesitas el [:], res un tuple.
Erik the Outgolfer
@EriktheOutgolfer, gracias, es un remanente de cuando r era una lista
TFeld
3

Dyalog APL , 12 bytes

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

Toma N en el lado derecho y M en el izquierdo. ¡Prueba APL aquí!

Explicación:

{(⊢,+\)⍣⍺⊢⍵}
{          } 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
fuente
Amo la explicación. Muy claro lo que está pasando. Difícil de entender APL de lo contrario: 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;}

Pruébalo en línea!

Roberto Graham
fuente
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)∇⍵,+\⍵}

Pruébalo en línea!

Función diádica, con Na la derecha y Ma la izquierda.

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

JavaScript (ES6), 55 54 bytes

Toma entrada en la sintaxis de curry (m)(n).

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

Casos de prueba

Arnauld
fuente
0

Jalea , 5 bytes

;+\$¡

Pruébalo en línea!

Versión sugerida por Dennis (devuelve en nlugar de [n]matrices singleton).

Erik el Outgolfer
fuente
Wy se puede quitar
Dennis
@ Dennis, me temo que la salida no será correcta entonces. Pensé en ello, pero si recibo entradas 1y 0me temo que regresaré en 1lugar de [1]eliminarlas, y no puedo usar un programa completo, ya que su salida aún sería así.
Erik the Outgolfer
1así es como Jelly muestra la matriz [1]. No veo problema con eso.
Dennis
@Dennis Hmm ... un poco sospechoso de eso (como dije en la última parte de mi comentario anterior) ... ¿hay algún consenso que lo permita, o contaría como "tipos de datos de abuso de lagunas estándar"?
Erik the Outgolfer
Ambos formatos están bien.
CG.
0

Clojure, 67 bytes

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