Somas cumulativas recursivamente concatenadas de [N] com iterações M

14

Tome dois números inteiros positivos N e Me criar somas acumuladas concatenados [N], com Miterações. Emita o resultado da última iteração.

Definição da soma acumulada concatenada:

  1. Comece com um número Ne defina uma sequênciaX = [N]
  2. Anexar a X somas acumuladas deX
  3. Repita a etapa 2 M vezes.

A soma cumulativa de um vetor X = [x1, x2, x3, x4]é:[x1, x1+x2, x1+x2+x3, x1+x2+x3+x4] .

Exemplo com N = 1eM = 4 :

P = a função soma acumulada.

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]

Observe que o primeiro X = [1]não é contado como uma iteração. Você pode optar por tomarM = 5 pelo exemplo acima (contando assim X = [1]como uma iteração).

Este é o OEIS A107946


Casos de teste:

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

Isso é , então o código mais curto vence. Formatos opcionais de entrada e saída.

CG.
fonte
É um pouco tarde demais agora, mas Nrealmente acrescenta algo ao problema? É apenas um fator constante pelo qual você multiplica o resultado.
Martin Ender

Respostas:

7

Haskell , 35 bytes

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

Experimente online!

Graças a H.PWiz por -18 bytes

Mego
fonte
tail.scanl(+)0pode serscanl1(+)
H.PWiz 6/17/17
@ H.PWiz Obrigado, eu sempre esqueço as *1versões do scane fold.
Mego 6/10
45 bytes
H.PWiz 6/17
1
35 bytes usandoiterate
H.PWiz 6/17
Vou apenas deixar de fora a explicação - muito esforço para alterá-la sempre: P
Mego 06/10
6

05AB1E , 7 bytes

¸IFDηO«

Experimente online!

Explicação

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

Casca , 9 8 7 bytes

Agradecemos a H.PWiz por economizar 1 byte.

!¡S+G+;

Experimente online!

Usa 1 com base M .

Explicação

      ;     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
fonte
Também foi minha abordagem, não sei se é possível jogar golfe. Além disso, eu já sugeriu para cumsumnão retornar um líder 0(algo que poderia salvar 2 bytes, neste caso).
Erik the Outgolfer
Pode ot∫ser G+?
H.PWiz
@ H.PWiz Hmm ... os documentos parecem pouco claros quanto a isso ("verificação" do AFAIK significa "reduzir" e não "reduzir cumulativo").
Erik the Outgolfer
Fé reduzir Gé cumulativo reduzir
H.PWiz
5

MATL , 6 bytes

:"tYsh

Entradas são M, então N.

Experimente online! Ou verifique todos os casos de teste .

Explicação

:"      % 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
fonte
3
O que? Tenho certeza que já tentei isso 100 vezes. Eu até tentei indo para o site do Suever para se certificar de que não estava alguns erros estranhos em TIO ... Eu não entendo isso em tudo ...
Stewie Griffin
2
Não consigo parar de pensar nisso ... Tenho certeza absoluta de que escrevi esses caracteres exatos várias vezes e tentei executá-lo em dois sites diferentes, sem sucesso. Como esse não pode ser o caso, a única explicação que resta é que eu estou ficando louco ... Isso realmente mexe com a minha cabeça!
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

Experimente online!

Guardado 6 8 bytes graças a Rod
Guardado 3 bytes graças a Erik

TFeld
fonte
@Rod Mais agradecimentos: D
TFeld 6/17
Você não precisa do [:], ré um tuple.
Erik the Outgolfer
@EriktheOutgolfer, graças, é uma sobra de quando r era uma lista
TFeld
3

Dyalog APL , 12 bytes

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

Pega N no lado direito e M no esquerdo. TryAPL aqui!

Explicação:

{(⊢,+\)⍣⍺⊢⍵}
{          } 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
fonte
Ame a explicação. Muito claro o que está acontecendo. Difícil de entender o APL de outra forma: P
Emigna 06/10
2

Java (OpenJDK 8) , 191 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;}

Experimente online!

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

Experimente online!

Função diádica, com Nà direita e Mà esquerda.

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

R , 46 bytes

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

Experimente online!

Giuseppe
fonte
0

JavaScript (ES6), 55 54 bytes

Recebe entrada na sintaxe de currying (m)(n).

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

Casos de teste

Arnauld
fonte
0

Gelatina , 5 bytes

;+\$¡

Experimente online!

Versão sugerida por Dennis (retorna em nvez de [n]para matrizes singleton).

Erik, o Outgolfer
fonte
We pode ser removido.
Dennis
@ Dennis, eu tenho medo que a saída não seja certa então? Pensei nisso, mas se eu receber entradas 1e 0tenho medo de retornar em 1vez de [1]removê-las, e não posso usar um programa completo, pois sua saída ainda seria assim.
Erik the Outgolfer
1é como o Jelly exibe a matriz [1]. Não vejo problema nisso.
Dennis
@ Dennis Hmm ... um pouco desconfiado disso (como eu disse na última parte do meu comentário acima) ... existe algum consenso que permita isso, ou contaria como "brecha padrão que abusa de tipos de dados"?
Erik the Outgolfer
Ambos os formatos estão ok.
CG.
0

Clojure, 67 bytes

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