Undelta multiplikasi


9

Mari kita mendefinisikan "delta multiplikatif" dari nilai sebagai:[a0,aN,]

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

Operasi terbalik - yaitu "undelta multiplikatif" - mengembalikan nilai sedemikian rupa sehingga operasi di atas menghasilkan nilai yang diberikan.

Contoh

Nilai yang diberikan solusi umum untuk operasi " multiplicative undelta " adalah:[1,5,3,2]

[a0,a01a1,a15a2,a23a3,a32a4]

Solusi tertentu dapat diperoleh dengan menetapkan ke nilai selain nol, misalnya dengan menetapkan kita akan mendapatkan:a0a0:=1

[1,1,5,15,30]

Tantangan

Tugas Anda untuk tantangan ini adalah mengimplementasikan operasi " undelta multiplikatif " sebagaimana didefinisikan di atas.

Aturan

Inputnya adalah:

  • nilai bukan nola0
  • daftar non-kosong / array / vektor / ... non-zero " delta perkalian "

Output adalah daftar / array / vektor / ... dari nilai-nilai sedemikian rupa sehingga elemen pertama adalah dan untuk itu " delta multiplikatif " adalah input.a0

Catatan: Jika bahasa Anda tidak memiliki dukungan bilangan bulat negatif, Anda dapat mengganti bukan-nol dengan positif .

Uji kasus

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]

Bisakah kita mengambil satu daftar panjang 1 + jumlah delta, di mana item pertama adalah a₀?
Adám

@ Adám: Saya akan mengatakan tidak untuk itu karena itu akan mengubah hal-hal untuk jawaban yang ada.
ბიმო

Jawaban:


17

Haskell, 8 byte

scanl(*)

Cobalah online!


Saya sedang memeriksa apakah ada yang menulis ini, dan saya pikir tidak ada yang menulisnya dan saya berkata "keren, maka saya akan menulis" dan kemudian melihat jawaban Anda di bagian bawah halaman. terbalik.
Windmill Cookies

9

APL (Dyalog), 3 byte

×\∊

Cobalah online!

Jika saya harus mengambil nomor di sebelah kiri dan array di sebelah kanan:

-2 terima kasih kepada @ H.PWiz

7 5 3 byte

×\,


2
⊣,⊢bisa saja,
H.PWiz

@ H.PWiz terima kasih, pendiam saya sangat lemah
Quintec

Anda tidak perlu orangtua; ×\,mengevaluasi ke suatu fungsi.
Dennis

@Dennis Sepertinya tidak berhasil sayangnya
Quintec

Anda tidak perlu menghitung paren, karena mereka tidak diperlukan dalam beberapa situasi. f←×\bekerja, misalnya. Btw, (-12 3 -17 1311)permalink Anda seharusnya (¯12 3 ¯17 1311).
Dennis

8

R , 15 byte

cumprod(scan())

Cobalah online!

Program lengkap. Fungsinya lebih lama (kecuali kami diizinkan untuk "merekatkan" input bersama, sehingga cumprodbawaan akan cukup sebagai jawaban yang lengkap):

R , 28 byte

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

Cobalah online!


5

MATL , 3 byte

hYp

Cobalah online!

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

The hYpe tentang MATL adalah nyata.



3

Japt, 3 byte

å*V

Cobalah


Penjelasan

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







1

Batch, 69 byte

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

Sebuah0




1

05AB1E , 5 3 byte

šηP

-2 byte terima kasih kepada @BMO .

Cobalah secara online atau verifikasi semua kasus uji .

Penjelasan:

š      # 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
Tidak, ada di ssana untuk mendapatkan input lainnya. :) sadalah swap, dan šdiawali di awal daftar. Either way, terima kasih untuk -2
Kevin Cruijssen

1

Pyth, 6 byte

*FR._s

Uji yang di sini!

Atau, 7 byte:

.u*NYEQ

Uji di sini!

Yang pertama mengambil input sebagai tuple, yang kedua mengambil input sebagai dua baris terpisah.

Terima kasih kepada @Sok untuk membantu saya dalam memetakan dan menghemat 1 byte.


1
Anda dapat menyimpan byte dengan mengimplementasikan peta pada solusi kedua seperti R, seperti dalam *FR._s- demonstrasi
Sok

@ Oke tangkapan bagus! Saya telah mencoba Mmenganggap itu akan berhasil, kemudian mengalami kegagalan penguraian gula - terutama karena saya tidak ingat bagaimana penguraian untuk F <pf2>bekerja.
Steven H.

Aku akan jujur, saya tidak benar-benar mengerti bagaimana bersarang M, F, L, dan Rbekerja, saya hanya mencoba a bunch sampai satu bekerja: o)
Sok

1

Python 2 , 40 byte

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

Cobalah online!

Anehnya, pindah ke Python 3 dan penggunaan generator di sana hanya menghemat 1 byte dari solusi rekursif.


1

PowerShell , 29 byte

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

Cobalah online!

Ini mengasumsikan hanya mengeluarkan nilai-nilai saja.

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

Jika itu tidak baik, ini sebenarnya membangun daftar dan kemudian mendorongnya ke toString yang mencetak dengan cara yang sama.

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

Aturan adalah: Output is a list/array/vector/. Jadi, yang pertama baik-baik saja.
mazzy

1

MathGolf , 6 5 byte

\{\o*

Cobalah online!

Saya pikir ini bisa menjadi 5 byte ( \{\o*) tetapi \instruksi tampaknya sedikit mati ketika berhadapan dengan input. Ini sekarang diperbaiki dalam versi terbaru.

Penjelasan:

\       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

Saya telah mendesain ulang penanganan `` dengan input implisit. Masih menangani item pada stack dengan cara yang sama, tetapi sekarang muncul dua elemen dari input ke stack, bukan hanya satu. Saya pikir ini bisa berguna untuk tantangan ini.
Maks.


0

Arang , 12 byte

IE⁺⟦N⟧AΠ⊞Oυι

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

    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 byte

{(*\)x,y}

Cobalah online!

Bergabung dengan angka pertama ke input kedua sebagai daftar, dan kemudian mengembalikan hasil perkalian berturut-turut

Uji Kasus

Masukkan input Anda setelah fungsi seperti di bawah ini dan kemudian jalankan, karena saya tidak yakin bagaimana menggunakan input dengan benar untuk bahasa ini di TiO

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

0

dc , 13 byte

p[*pz1<A]dsAx

Cobalah 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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.