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]
ბიმო
la source
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!

nimi
la source
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

×\,

Quintec
la source
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!

Kirill L.
la source
5

MATL , 3 octets

hYp

Essayez-le en ligne!

            #implicit input, x_0 and A
h           #horizontally concatenate
Yp          #cumulative product
            #implicit output

Le hYpe sur MATL est réel.

Giuseppe
la source
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
Hirsute
la source
2

J , 6 5 octets

-1 octet grâce à Bubbler

*/\@,

Essayez-le en ligne!

Explication:

Un verbe a0diadique , l'argument de gauche est , le rigth - le vecteur

     @, - append the vector to a0 and 
  */\   - find the running product
Galen Ivanov
la source
@Bubbler Oui, bien sûr! Je vous remercie!
Galen Ivanov
1

Lot, 69 octets

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

une0

Neil
la source
1

Lisp commun, 67 octets

(lambda(a l &aux(y 1))(mapcar(lambda(x)(setf y(* y x)))(cons a l)))

Essayez-le en ligne!

Renzo
la source
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]
Kevin Cruijssen
la source
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.

Steven H.
la source
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.

Steven H.
la source
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
Veskah
la source
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
Jo King
la source
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

Python 2 , 47 octets

lambda n,A:reduce(lambda a,c:a+[a[-1]*c],A,[n])

Essayez-le en ligne!

Chas Brown
la source
Il peut être intéressant pour vous qu'une solution python soit plus courte en python 3 utilisant des générateurs
Quintec
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
Neil
la source
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]
Thaufeki
la source
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
eush77
la source