Multiplikatives Undelta

9

Definieren wir die "multiplikativen Deltas" von Werten als:[a0,aN,]

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

Die umgekehrte Operation - nämlich "multiplikatives Undelta" - gibt Werte zurück, so dass die obige Operation zu den gegebenen Werten führt.

Beispiel

Gegebene Werte Eine allgemeine Lösung für die " multiplikative Undelta " -Operation lautet:[1,5,3,2]

[a0,a01a1,a15a2,a23a3,a32a4]

Eine bestimmte Lösung kann erhalten werden, indem auf einen anderen Wert als Null gesetzt wird, beispielsweise durch Setzen von wir erhalten würden:a0a0:=1

[1,1,5,15,30]

Herausforderung

Ihre Aufgabe für diese Herausforderung ist es, die oben definierte Operation " multiplikatives Undelta " zu implementieren .

Regeln

Eingaben sind:

  • ein Wert ungleich Nulla0
  • eine nicht leere Liste / Array / Vektor / ... von nicht multiplizierten " multiplikativen Deltas "

Die Ausgabe ist eine Liste / ein Array / ein Vektor / ... von Werten, so dass das erste Element und für die die " multiplikativen Deltas " die Eingabe sind.a0

Hinweis: Wenn Ihre Sprache keine negativen Ganzzahlen unterstützt, können Sie Nicht-Null durch positive ersetzen .

Testfälle

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]
ბიმო
quelle
Dürfen wir eine einzelne Liste mit der Länge 1 + Anzahl der Deltas nehmen, wobei der erste Punkt a₀ ist?
Adám
@ Adám: Ich werde nein dazu sagen, weil es die Dinge für bestehende Antworten ändern würde.
9.

Antworten:

17

Haskell, 8 Bytes

scanl(*)

Probieren Sie es online aus!

Nimi
quelle
Ich habe überprüft, ob jemand dies geschrieben hat, und ich dachte, niemand hat es geschrieben, und ich sagte "cool, dann schreibe ich" und sah dann Ihre Antwort am Ende der Seite. upvoted.
Windmill Cookies
9

APL (Dyalog), 3 Bytes

×\∊

Probieren Sie es online aus!

Wenn ich die Nummer links und das Array rechts nehmen muss:

-2 danke an @ H.PWiz

7 5 3 Bytes

×\,

Quintec
quelle
2
⊣,⊢kann nur sein,
H.PWiz
@ H.PWiz danke, mein stillschweigendes ist extrem schwach
Quintec
Du brauchst die Eltern nicht; ×\,ergibt eine Funktion.
Dennis
@ Tennis Scheint leider nicht zu funktionieren
Quintec
Sie müssen die Parens nicht zählen, da sie in einigen Situationen nicht benötigt werden. f←×\funktioniert zum Beispiel. Übrigens sollte das (-12 3 -17 1311)in Ihrem Permalink sein (¯12 3 ¯17 1311).
Dennis
8

R , 15 Bytes

cumprod(scan())

Probieren Sie es online aus!

Volles Programm. Die Funktion ist länger (es sei denn, wir durften die Eingänge "zusammenkleben", so dass die integrierte cumprodAntwort als vollständige Antwort ausreichen würde):

R , 28 Bytes

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

Probieren Sie es online aus!

Kirill L.
quelle
5

MATL , 3 Bytes

hYp

Probieren Sie es online aus!

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

Das hYpe über MATL ist real.

Giuseppe
quelle
3

Japt, 3 Bytes

å*V

Versuch es


Erläuterung

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

J , 6 5 Bytes

-1 Byte dank Bubbler

*/\@,

Probieren Sie es online aus!

Erläuterung:

Ein diadisches Verb, das linke Argument ist a0das richtige - der Vektor

     @, - append the vector to a0 and 
  */\   - find the running product
Galen Ivanov
quelle
@Bubbler Ja natürlich! Vielen Dank!
Galen Ivanov
1

Stapel, 69 Bytes

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

a0

Neil
quelle
1

Common Lisp, 67 Bytes

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

Probieren Sie es online aus!

Renzo
quelle
1

05AB1E , 5 3 Bytes

šηP

-2 Bytes dank @BMO .

Probieren Sie es online aus oder überprüfen Sie alle Testfälle .

Erläuterung:

š      # 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
quelle
1
Nein, das swar da, um den anderen Input zu bekommen. :) sist Swap und šsteht am Anfang der Liste.
Wie auch immer
1

Pyth, 6 Bytes

*FR._s

Testen Sie das hier!

Alternativ 7 Bytes:

.u*NYEQ

Testen Sie es hier!

Der erste nimmt die Eingabe als Tupel, der zweite die Eingabe als zwei separate Zeilen.

Vielen Dank an @Sok, der mir geholfen hat, 1 Byte gut zuzuordnen und zu speichern.

Steven H.
quelle
1
Sie können ein Byte speichern, indem Sie die Karte in der zweiten Lösung als R, wie in *FR._s- Demonstration
Sok
@Sok Schöner Fang! Ich hatte versucht Manzunehmen, dass es funktionieren würde, und dann einen Zuckeranalysefehler erhalten - hauptsächlich, weil ich mich nicht daran erinnerte, wie das Parsen F <pf2>funktioniert hatte.
Steven H.
Ich will ehrlich sein, ich verstehe wirklich nicht , wie verschachtelt M, F, L, und RArbeit, ich habe gerade versucht , ein Bündel , bis man gearbeitet: o)
Sok
1

Python 2 , 40 Bytes

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

Probieren Sie es online aus!

Überraschenderweise spart die Umstellung auf Python 3 und die Verwendung von Generatoren dort nur 1 Byte gegenüber der rekursiven Lösung.

Steven H.
quelle
1

PowerShell , 29 Byte

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

Probieren Sie es online aus!

Dies setzt voraus, dass nur die Ausgabe der Werte in Ordnung ist.

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

Wenn dies nicht in Ordnung ist, wird die Liste erstellt und an toString gesendet, das auf die gleiche Weise gedruckt wird.

param($a,$b)$c=,$a;$b|%{$c+=$_*$c[-1]};$c #41 bytes
Veskah
quelle
Regeln sind : Output is a list/array/vector/. Das erste ist also in Ordnung.
mazzy
1

MathGolf , 6 5 Bytes

\{\o*

Probieren Sie es online aus!

Ich denke, das könnten 5 Bytes ( \{\o*) sein, aber der \Befehl scheint ein wenig anders zu sein , wenn es um Eingaben geht. Dies ist jetzt in der neuesten Version behoben.

Erläuterung:

\       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
Scherzen
quelle
Ich habe die Behandlung von `` mit impliziter Eingabe neu gestaltet. Es behandelt weiterhin Elemente auf dem Stapel auf die gleiche Weise, aber jetzt werden zwei Elemente von der Eingabe auf den Stapel anstatt nur eines eingefügt. Ich denke, es könnte für diese Herausforderung nützlich sein.
Maxb
0

Python 2 , 47 Bytes

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

Probieren Sie es online aus!

Chas Brown
quelle
Es kann für Sie von Interesse sein, dass eine Python-Lösung in Python 3 mit Generatoren kürzer ist
Quintec
0

Holzkohle , 12 Bytes

IE⁺⟦N⟧AΠ⊞Oυι

Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Erläuterung:

    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
quelle
0

K (oK) , 9 Bytes

{(*\)x,y}

Probieren Sie es online aus!

Verbindet die erste Zahl mit der zweiten Eingabe als Liste und gibt dann aufeinanderfolgende Multiplikationsergebnisse zurück

Testfälle

Geben Sie Ihre Eingabe nach der folgenden Funktion ein und führen Sie sie aus, da ich nicht sicher bin, wie Sie die Eingabe für diese Sprache in TiO richtig verwenden sollen

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