undelta แบบทวีคูณ


9

ให้เรากำหนดค่า"delta multiplicative"ของค่าต่างๆ[a0,aN,] เช่น:

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

การดำเนินการย้อนกลับ - คือ"multiplicative undelta" - ส่งคืนค่าเช่นการดำเนินการข้างต้นส่งผลให้ค่าที่กำหนด

ตัวอย่าง

ค่าที่กำหนด [1,5,3,2]โซลูชันทั่วไปสำหรับการดำเนินการ " multiplicative undelta " คือ:

[a0,a01a1,a15a2,a23a3,a32a4]

วิธีการแก้ปัญหาเฉพาะสามารถรับได้โดยการตั้งค่า a0 เป็นค่าใด ๆ ที่ไม่ใช่ศูนย์ตัวอย่างเช่นโดยการตั้งค่า a0:=1 เราจะได้รับ:

[1,1,5,15,30]

ท้าทาย

งานของคุณสำหรับความท้าทายนี้คือการใช้การดำเนินการ " multiplicative undelta " ตามที่กำหนดไว้ข้างต้น

กฎระเบียบ

อินพุตคือ:

  • ค่าที่ไม่เป็นศูนย์ a0
  • รายการ / อาเรย์ / เวกเตอร์ / ... ที่ไม่เป็นค่าว่างของ " delta แบบทวีคูณ "

เอาต์พุตเป็นรายการ / array / vector / ... ของค่าที่องค์ประกอบแรกคือ a0และที่ " multiplicative deltas " เป็นอินพุต

หมายเหตุ:ถ้าภาษาของคุณได้รับการสนับสนุนของจำนวนเต็มเชิงลบที่คุณไม่อาจแทนที่ไม่ใช่ศูนย์โดยในเชิงบวก

กรณีทดสอบ

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]

เราขอรายการเดลต้าที่มีความยาว 1 + หมายเลขเดียวได้ไหมรายการแรกคือa₀?
Adám

@ Adám: ฉันจะบอกว่าไม่เพราะมันจะเปลี่ยนสิ่งสำหรับคำตอบที่มีอยู่
ბიმო

คำตอบ:


17

Haskell ขนาด 8 ไบต์

scanl(*)

ลองออนไลน์!


ฉันกำลังตรวจสอบว่ามีใครเขียนหรือไม่และฉันคิดว่าไม่มีใครเขียนและฉันบอกว่า "เท่ห์แล้วฉันจะเขียน" แล้วก็เห็นคำตอบของคุณที่ด้านล่างของหน้า upvoted
คุกกี้ Windmill

9

APL (Dyalog) 3 ไบต์

×\∊

ลองออนไลน์!

ถ้าฉันต้องใส่ตัวเลขทางซ้ายและอาร์เรย์ทางด้านขวา:

-2 ขอบคุณ @ H.PWiz

7 5 3 ไบต์

×\,


2
⊣,⊢สามารถเป็นได้,
H.PWiz

@ H.PWiz ขอบคุณโดยปริยายของฉันอ่อนแอมาก
Quintec

คุณไม่จำเป็นต้องมี parens; ×\,ประเมินฟังก์ชั่น
เดนนิส

@Dennis ดูเหมือนว่าจะไม่ทำงานอย่างน่าเสียดาย
Quintec

คุณไม่จำเป็นต้องนับ parens เพราะไม่จำเป็นในบางสถานการณ์ f←×\ทำงานได้เช่น Btw ที่ในความคิดเห็นของคุณควรจะ(-12 3 -17 1311) (¯12 3 ¯17 1311)
เดนนิส

8

R , 15 ไบต์

cumprod(scan())

ลองออนไลน์!

โปรแกรมเต็มรูปแบบ ฟังก์ชั่นนั้นยาวกว่า (ยกเว้นว่าเราได้รับอนุญาตให้ "กาว" อินพุตเข้าด้วยกันดังนั้นในตัวcumprodจะพอเพียงเป็นคำตอบที่สมบูรณ์):

R , 28 ไบต์

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

ลองออนไลน์!











1

Batch, 69 bytes

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

Takes input of a0 on STDIN and the deltas as command-line arguments.




1

05AB1E, 5 3 bytes

šηP

-2 bytes thanks to @BMO.

Try it online or verify all test cases.

Explanation:

š      # 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
No, the s was there to get the other input. :) s is swap, and š is prepending at the start of the list. Either way, thanks for the -2
Kevin Cruijssen

1

Pyth, 6 bytes

*FR._s

Test that one here!

Alternatively, 7 bytes:

.u*NYEQ

Test it here!

The first takes input as a tuple, the second takes input as two separate lines.

Thanks to @Sok for helping me with getting good at mapping and saving 1 byte.


1
You can save a byte by implementing the map in the second solution as R, as in *FR._s - demonstration
Sok

@Sok Nice catch! I had tried M assuming it'd work, then got a sugar parse failure - mostly because I didn't remember how the parsing for F <pf2> worked.
Steven H.

I'll be honest, I don't really understand how nested M, F, L, and R work, I just tried a bunch until one worked :o)
Sok


1

PowerShell, 29 bytes

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

Try it online!

This assumes just outputting the values is fine.

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

If that's not fine, this actually builds the list and then pushes it to toString which prints the same way.

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

Rules are: Output is a list/array/vector/. So, the first is fine.
mazzy

1

MathGolf, 6 5 bytes

\{\o*

Try it online!

I think this could be 5 bytes (\{\o*) but \ instruction seems a little off when dealing with input. This is now fixed in the latest version.

Explanation:

\       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

I have redesigned the handling of `` with implicit input. It still handles items on the stack the same way, but now it pops two elements from the input onto the stack instead of just one. I think it could be useful for this challenge.
maxb


0

Charcoal, 12 bytes

IE⁺⟦N⟧AΠ⊞Oυι

Try it online! Link is to verbose version of code. Explanation:

    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}

Try it online!

Joins the first number to the second input as a list, and then returns successive results of multiplication

Test Cases

Enter your input after the function like below and then run, as I'm unsure how to use input properly for this language in TiO

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.