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.


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:



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

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.

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

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


@ 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

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!


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



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


0

Jalea , 5 bytes

;+\$¡

Pruébalo en línea!

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


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))))
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.