Multiplikatywna undelta


9

Zdefiniujmy „multiplikatywne delty” wartości[za0,zaN.,] tak jak:

[za1/za0,,zaja+1/zaja,,zaN./zaN.-1]

Operacja odwrotna - mianowicie „multiplikatywna undelta” - zwraca takie wartości, że powyższa operacja daje podane wartości.

Przykład

Podane wartości ogólnym rozwiązaniem operacji „ multiplikatywnej undelty ” jest:[1,5,3),2)]

[za0,za01za1,za15za2),za2)3)za3),za3)2)za4]

Konkretne rozwiązanie można uzyskać ustawiając na dowolną wartość inną niż zero, na przykład ustawiając otrzymalibyśmy:za0za0: =1

[1,1,5,15,30]

Wyzwanie

Twoim zadaniem w tym wyzwaniu jest wdrożenie operacji „ multiplikatywna undelta ”, jak zdefiniowano powyżej.

Zasady

Dane wejściowe to:

  • niezerowa wartość za0
  • niepusta lista / tablica / wektor / ... niezerowych „ multiplikatywnych delt

Dane wyjściowe są listą / tablicą / wektorem /… wartości takich, że pierwszym elementem jest za0 i dla których wejściowe są „ multiplikatywne delty ”.

Uwaga: jeśli twój język nie obsługuje ujemnych liczb całkowitych, możesz zamienić niezerową na dodatnią .

Przypadki testowe

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]

Czy możemy wziąć jedną listę o długości 1 + liczba delt, gdzie pierwszą pozycją jest a₀?
Adám,

@ Adám: Powiem „nie”, ponieważ to zmieniłoby rzeczy w przypadku istniejących odpowiedzi.
ბიმო

Odpowiedzi:


17

Haskell, 8 bajtów

scanl(*)

Wypróbuj online!


Sprawdzałem, czy ktoś to napisał, i pomyślałem, że nikt tego nie napisał, i powiedziałem „fajnie, a potem napiszę”, a potem zobaczyłem twoją odpowiedź na dole strony. pozytywnie oceniany.
Windmill Cookies

9

APL (Dyalog), 3 bajty

×\∊

Wypróbuj online!

Jeśli muszę wziąć liczbę po lewej stronie i tablicę po prawej:

-2 dzięki @ H.PWiz

7 5 3 bajty

×\,


2
⊣,⊢może po prostu być,
H.PWiz

@ H.PWiz dzięki, moja milcząca jest bardzo słaba
Quintec

Nie potrzebujesz parenów; ×\,ocenia na funkcję.
Dennis,

@Dennis Nie wydaje się niestety niestety
Quintec

Nie musisz liczyć parenów, ponieważ w niektórych sytuacjach nie są one potrzebne. f←×\działa na przykład. Btw, (-12 3 -17 1311)powinno być w twoim permalink (¯12 3 ¯17 1311).
Dennis,

8

R , 15 bajtów

cumprod(scan())

Wypróbuj online!

Pełny program Funkcja jest dłuższa (chyba że pozwolono nam „skleić” dane wejściowe razem, aby wbudowana cumprodwystarczyła jako pełna odpowiedź):

R , 28 bajtów

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

Wypróbuj online!




3

Japt, 3 bajty

å*V

Spróbuj


Wyjaśnienie

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







1

Partia, 69 bajtów

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

Pobiera dane wejściowe z za0 na STDIN i delcie jako argumenty wiersza poleceń.




1

05AB1E , 5 3 bajty

šηP

-2 bajty dzięki @BMO .

Wypróbuj online lub sprawdź wszystkie przypadki testowe .

Wyjaśnienie:

š      # 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
Nie, sbył tam, aby uzyskać inne dane wejściowe. :) szamienia się i šprzygotowuje na początku listy. Tak czy inaczej, dzięki za -2
Kevin Cruijssen

1

Pyth, 6 bajtów

*FR._s

Przetestuj tutaj!

Alternatywnie 7 bajtów:

.u*NYEQ

Sprawdź to tutaj!

Pierwszy pobiera dane wejściowe jako krotkę, drugi przyjmuje dane wejściowe jako dwie oddzielne linie.

Dzięki @Sok za pomoc w uzyskaniu dobrego mapowania i zaoszczędzeniu 1 bajtu.


1
Można zapisać bajt wdrażając mapę w drugim roztworze jako R, jak w *FR._s- demonstracja
Sok

@Sok Nice catch! Próbowałem Mzałożyć, że to zadziała, ale potem wystąpił błąd parsowania cukru - głównie dlatego, że nie pamiętam, jak działa parsowanie F <pf2>.
Steven H.,

Będę szczery, ja naprawdę nie rozumiem jak zagnieżdżone M, F, L, i Rpraca, po prostu próbowałem kilka aż jeden pracował: o)
Sok

1

Python 2 , 40 bajtów

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

Wypróbuj online!

Nieoczekiwanie przejście na Python 3 i korzystanie z generatorów pozwala zaoszczędzić tylko 1 bajt w stosunku do rozwiązania rekurencyjnego.


1

PowerShell , 29 bajtów

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

Wypróbuj online!

Zakłada się, że samo podanie wartości jest w porządku.

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

Jeśli to nie jest w porządku, to faktycznie buduje listę, a następnie wypycha ją doString, który drukuje w ten sam sposób.

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

Zasady są następujące: Output is a list/array/vector/. Pierwszy jest w porządku.
mazzy

1

MathGolf , 6 5 bajtów

\{\o*

Wypróbuj online!

Myślę, że może to być 5 bajtów ( \{\o*), ale \instrukcja wydaje się nieco nieprzyjemna w przypadku wprowadzania danych. Zostało to teraz naprawione w najnowszej wersji.

Wyjaśnienie:

\       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

Przeprojektowałem obsługę `` z niejawnym wejściem. Nadal obsługuje elementy na stosie w ten sam sposób, ale teraz wyrzuca dwa elementy z wejścia na stos zamiast jednego. Myślę, że przydałoby się to wyzwanie.
maxb


0

Węgiel drzewny , 12 bajtów

IE⁺⟦N⟧AΠ⊞Oυι

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

    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 bajtów

{(*\)x,y}

Wypróbuj online!

Łączy pierwszą liczbę z drugim wejściem jako listę, a następnie zwraca kolejne wyniki mnożenia

Przypadki testowe

Wprowadź dane wejściowe po funkcji, jak poniżej, a następnie uruchom, ponieważ nie jestem pewien, jak prawidłowo używać danych wejściowych dla tego języka w TiO

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

0

dc , 13 bajtów

p[*pz1<A]dsAx

Wypróbuj 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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.