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]

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:



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

×\,


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




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







1

Stapel, 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 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]

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.


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

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

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

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

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

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]

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.