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.


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

Respostas:



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

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.

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

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

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

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!


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



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


0

Gelatina , 5 bytes

;+\$¡

Experimente online!

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


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))))
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.