Undelta multiplicatif


9

Définissons les "deltas multiplicatifs" des valeurs [a0,aN,] comme:

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

L'opération inverse - à savoir "undelta multiplicative" - renvoie des valeurs telles que l'opération ci-dessus donne les valeurs données.

Exemple

Valeurs données [1,5,3,2] une solution générale à l'opération "multiplicative undelta" est:

[a0,a01a1,a15a2,a23a3,a32a4]

Une solution particulière peut être obtenue en définissant a0 sur une valeur autre que zéro, par exemple en définissant a0:=1 nous obtiendrions:

[1,1,5,15,30]

Défi

Votre tâche pour ce défi est de mettre en œuvre l'opération " undelta multiplicative " telle que définie ci-dessus.

Règles

Les entrées sont:

  • une valeur non nulle a0
  • une liste / tableau / vecteur / ... non vide de non-zéro " deltas multiplicatif "

La sortie est une liste / tableau / vecteur / ... de valeurs telles que le premier élément est a0 et pour lequel les " deltas multiplicatifs " sont l'entrée.

Remarque: Si votre langue ne prend pas en charge les nombres négatifs, vous pouvez remplacer non nul par positif .

Cas de test

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]

Pouvons-nous prendre une seule liste de longueur 1 + nombre de deltas, où le premier élément est a₀?
2018

@ Adám: Je vais dire non car cela changerait les choses pour les réponses existantes.
ბიმო

Réponses:


17

Haskell, 8 octets

scanl(*)

Essayez-le en ligne!


Je vérifiais si quelqu'un avait écrit cela, et je pensais que personne ne l'avait écrit et j'ai dit "cool, alors j'écrirai" et j'ai vu ta réponse au bas de la page. voté.
Cookies du moulin

9

APL (Dyalog), 3 octets

×\∊

Essayez-le en ligne!

Si je dois prendre le nombre à gauche et le tableau à droite:

-2 merci à @ H.PWiz

7 5 3 octets

×\,


2
⊣,⊢peut simplement être,
H.PWiz

@ H.PWiz merci, mon tacite est extrêmement faible
Quintec

Vous n'avez pas besoin des parens; ×\,évalue à une fonction.
Dennis

@Dennis ne semble pas fonctionner malheureusement
Quintec

Vous n'avez pas besoin de compter les parens, car ils ne sont pas nécessaires dans certaines situations. f←×\fonctionne, par exemple. Btw, le (-12 3 -17 1311)dans votre permalien devrait être (¯12 3 ¯17 1311).
Dennis

8

R , 15 octets

cumprod(scan())

Essayez-le en ligne!

Programme complet. La fonction est plus longue (sauf si nous étions autorisés à «coller» les entrées ensemble, de sorte que la fonction intégrée cumprodsuffirait comme réponse complète):

R , 28 octets

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

Essayez-le en ligne!




3

Japt, 3 octets

å*V

Essayez-le


Explication

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







1

Lot, 69 octets

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

une0




1

05AB1E , 5 3 octets

šηP

-2 octets grâce à @BMO .

Essayez-le en ligne ou vérifiez tous les cas de test .

Explication:

š      # 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]

1
Non, le sétait là pour obtenir l'autre entrée. :) sest swap et šprécède au début de la liste. Quoi qu'il en soit, merci pour le -2
Kevin Cruijssen

1

Pyth, 6 octets

*FR._s

Testez celui-là ici!

Alternativement, 7 octets:

.u*NYEQ

Testez-le ici!

Le premier prend l'entrée comme un tuple, le second prend l'entrée comme deux lignes distinctes.

Merci à @Sok de m'avoir aidé à bien mapper et à économiser 1 octet.


1
Vous pouvez enregistrer un octet en implémentant la carte dans la deuxième solution comme R, comme dans *FR._s- démonstration
Sok

@Sok Nice catch! J'avais essayé de Msupposer que cela fonctionnerait, puis j'ai eu un échec de l'analyse du sucre - principalement parce que je ne me souvenais pas du fonctionnement de l'analyse F <pf2>.
Steven H.

Je vais être honnête, je ne comprends pas vraiment comment imbriqué M, F,L et le Rtravail, je viens d' essayer un tas jusqu'à ce qu'un travaillé: o)
Sok

1

Python 2 , 40 octets

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

Essayez-le en ligne!

Étonnamment, le passage à Python 3 et l'utilisation de générateurs n'y économisent qu'un octet par rapport à la solution récursive.


1

PowerShell , 29 octets

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

Essayez-le en ligne!

Cela suppose que la sortie des valeurs est correcte.

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

Si cela ne va pas, cela crée en fait la liste, puis la pousse vers toString qui s'imprime de la même manière.

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

Les règles sont: Output is a list/array/vector/. Donc, le premier va bien.
mazzy du

1

MathGolf , 6 5 octets

\{\o*

Essayez-le en ligne!

Je pense que cela pourrait être de 5 octets ( \{\o*) mais l' \instruction semble un peu décalée lorsqu'il s'agit de l'entrée. Ceci est maintenant corrigé dans la dernière version.

Explication:

\       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

J'ai repensé la gestion de `` avec une entrée implicite. Il gère toujours les éléments de la pile de la même manière, mais maintenant, il dépose deux éléments de l'entrée sur la pile au lieu d'un seul. Je pense que cela pourrait être utile pour ce défi.
max


0

Fusain , 12 octets

IE⁺⟦N⟧AΠ⊞Oυι

Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:

    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 octets

{(*\)x,y}

Essayez-le en ligne!

Joint le premier nombre à la deuxième entrée sous forme de liste, puis renvoie les résultats successifs de la multiplication

Cas de test

Entrez votre entrée après la fonction comme ci-dessous, puis exécutez, car je ne sais pas comment utiliser correctement l'entrée pour cette langue dans TiO

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

0

dc , 13 octets

p[*pz1<A]dsAx

Essayez-le en ligne!

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.