Undelta multiplicativo


9

Vamos definir os "deltas multiplicativos" dos valores [a0,aN,] como:

[a1/a0,,ai+1/ai,,aN/aN1]

A operação reversa - ou seja, "undelta multiplicativo" - retorna valores de forma que a operação acima resulte nos valores fornecidos.

Exemplo

Valores fornecidos [1,5,3,2] uma solução geral para aoperação "undelta multiplicativa" é:

[a0,a01a1,a15a2,a23a3,a32a4]

A solução particular pode ser obtido através da criação a0 a qualquer valor diferente de zero, por exemplo através da criação a0:=1 obteríamos:

[1,1,5,15,30]

Desafio

Sua tarefa para este desafio é implementar a operação " undelta multiplicativo ", conforme definido acima.

Regras

As entradas são:

  • um valor diferente de zero a0
  • uma lista não-vazia / array / vetor / ..., de "não-zero de deltas multiplicativos "

A saída é uma lista / matriz / vetor / ... de valores, de modo que o primeiro elemento seja a0 e para o qual os " deltas multiplicativos " são a entrada.

Nota: Se o seu idioma não suportar números inteiros negativos, você poderá substituir diferente de zero por positivo .

Casos de teste

2 [21] -> [2,42]
1 [1,5,3,2] -> [1,1,5,15,30]
-1 [1,5,3,2] -> [-1,-1,-5,-15,-30]
7 [1,-5,3,2] -> [7,7,-35,-105,-210]
2 [-12,3,-17,1311] -> [2,-24,-72,1224,1604664]
-12 [7,-1,-12,4] -> [-12,-84,84,-1008,-4032]
1 [2,2,2,2,2,2,2,2] -> [1,2,4,8,16,32,64,128,256]

Podemos fazer uma lista única de comprimento 1 + número de deltas, onde o primeiro item é a₀?
Adám 9/10/18

@ Adám: vou dizer não a isso, porque isso mudaria as respostas existentes.
ბიმო

Respostas:


17

Haskell, 8 bytes

scanl(*)

Experimente online!


Eu estava checando se alguém escreveu isso, e achei que ninguém havia escrito e eu disse "legal, então eu vou escrever" e então vi sua resposta na parte inferior da página. votado.
9338 Windmill Cookies

9

APL (Dyalog), 3 bytes

×\∊

Experimente online!

Se eu tiver que pegar o número à esquerda e a matriz à direita:

-2 graças a @ H.PWiz

7 5 3 bytes

×\,


2
⊣,⊢pode apenas ser #,
2140 H.PWiz

@ H.PWiz obrigado, meu tácito é extremamente fraco
Quintec

Você não precisa dos parênteses; ×\,avalia como uma função.
Dennis

@Dennis Não parece funcionar infelizmente
Quintec

Você não precisa contar os parênteses, porque eles não são necessários em algumas situações. f←×\funciona, por exemplo. Btw, o (-12 3 -17 1311)em seu link permanente deve ser (¯12 3 ¯17 1311).
Dennis

8

R , 15 bytes

cumprod(scan())

Experimente online!

Programa completo. A função é mais longa (a menos que tenhamos permissão para "colar" as entradas, para que a built-in cumprodseja suficiente como resposta completa):

R , 28 bytes

function(i,x)cumprod(c(i,x))

Experimente online!




3

Japonês, 3 bytes

å*V

Tente


Explicação

        :Implicit input of array U and integer V
å       :Cumulatively reduce U
 *      :By multiplication
  V     :With an initial value of V







1

Lote, 69 bytes

@set/pa=
@echo %a%
@for %%d in (%*) do @set/aa*=%%d&call echo %%a%%

a0




1

05AB1E , 5 3 bytes

šηP

-2 bytes graças a @BMO .

Experimente online ou verifique todos os casos de teste .

Explicação:

š      # Prepend the (implicit) input-integer at the start of the (implicit) input-list
       #  i.e. -12 and [7,-1,-12,4] → ["-12",7,-1,-12,4]
 η     # Prefixes of this new list
       #  i.e. ["-12",7,-1,-12,4]
       #   → [["-12"],["-12",7],["-12",7,-1],["-12",7,-1,-12],["-12",7,-1,-12,4]]
  P    # Take the product of each inner list (and output implicitly)
       #  i.e. [["-12"],["-12",7],["-12",7,-1],["-12",7,-1,-12],["-12",7,-1,-12,4]]
       #   → [-12,-84,84,-1008,-4032]

11
Não, o sestava lá para obter a outra entrada. :) sé swap e šestá sendo anexado no início da lista. De qualquer maneira, obrigado pelo -2
Kevin Cruijssen 08/10

1

Pitão, 6 bytes

*FR._s

Teste esse aqui!

Como alternativa, 7 bytes:

.u*NYEQ

Teste aqui!

O primeiro recebe a entrada como uma tupla, o segundo recebe a entrada como duas linhas separadas.

Obrigado à @Sok por me ajudar a melhorar o mapeamento e economizar 1 byte.


11
Você pode salvar um byte através da implementação do mapa na segunda solução como R, como em *FR._s- demonstração
Sok

@Sok captura agradável! Eu tentei Msupor que funcionaria e depois tive uma falha na análise de açúcar - principalmente porque não me lembrava como a análise F <pf2>funcionava.
Steven H.

Eu vou ser honesto, eu realmente não entendo como aninhados M, F, L, e Rtrabalho, eu apenas tentei um monte até que um trabalhou: o)
Sok

1

Python 2 , 40 bytes

f=lambda a,b:[a]+(b and f(a*b[0],b[1:]))

Experimente online!

Surpreendentemente, a mudança para o Python 3 e o uso de geradores lá economizam apenas 1 byte sobre a solução recursiva.


1

PowerShell , 29 bytes

param($a,$b)$a;$b|%{($a*=$_)}

Experimente online!

Isso pressupõe que apenas a saída dos valores esteja correta.

> .\scratch.ps1 1 (1,5,3,2)
1
1
5
15
30

Se isso não for bom, isso realmente cria a lista e a envia para aString que imprime da mesma maneira.

param($a,$b)$c=,$a;$b|%{$c+=$_*$c[-1]};$c #41 bytes

As regras são: Output is a list/array/vector/. Então, o primeiro está bem.
Mazzy

1

MathGolf , 6 5 bytes

\{\o*

Experimente online!

Eu acho que isso pode ser 5 bytes ( \{\o*), mas\ instrução parece um pouco desligada ao lidar com entrada. Agora isso foi corrigido na versão mais recente.

Explicação:

\       Swap arguments, pushing both to stack
 {      Foreach loop over second argument
  \o    Output counter with newline
    *   Multiply counter by current element
        Implicitly output the last element

Redesenhei a manipulação de `` com entrada implícita. Ele ainda lida com itens da pilha da mesma maneira, mas agora lança dois elementos da entrada na pilha em vez de apenas um. Eu acho que poderia ser útil para esse desafio.
maxb


0

Carvão , 12 bytes

IE⁺⟦N⟧AΠ⊞Oυι

Experimente online! Link é a versão detalhada do código. Explicação:

    N           Input a₀
   ⟦ ⟧          Wrap in a list
      A         Input deltas as a list
  ⁺              Concatenate lists
 E              Map over elements
           ι    Current element
          υ     Predefined empty list variable
        ⊞O      Push and return updated list
       Π        Product
I               Cast to string
                Implicitly print each value on its own line

0

K (oK) , 9 bytes

{(*\)x,y}

Experimente online!

Une o primeiro número à segunda entrada como uma lista e retorna resultados sucessivos de multiplicação

Casos de teste

Digite sua entrada após a função como abaixo e execute, pois não tenho certeza de como usar a entrada corretamente para esse idioma no TiO

{(*\)x,y}[1;1 5 3 2]

0

dc , 13 bytes

p[*pz1<A]dsAx

Experimente online!

p[*pz1<A]dsAx
p               # Print the first element
  *p            # Multiply top elements on the stack
 [  z1<A]dsAx   # until only one element is left
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.