Nhân giống undelta


9

Hãy để chúng tôi xác định "deltas nhân" của các giá trị [một0,mộtN,] như:

[một1/một0,,mộtTôi+1/mộtTôi,,mộtN/mộtN-1]

Hoạt động ngược lại - cụ thể là "phép nhân undelta" - trả về các giá trị sao cho thao tác trên dẫn đến các giá trị đã cho.

Thí dụ

Cho các giá trị [1,5,3,2] một giải pháp chung chohoạt động"nhân bội" là:

[một0,một01một1,một15một2,một23một3,một32một4]

Một giải pháp đặc biệt có thể thu được bằng cách thiết lập một0 đến bất kỳ giá trị khác hơn không, ví dụ bằng cách thiết lập một0: =1 , chúng tôi sẽ nhận được:

[1,1,5,15,30]

Thử thách

Nhiệm vụ của bạn cho thử thách này là thực hiện thao tác " nhân bội " như được định nghĩa ở trên.

Quy tắc

Đầu vào là:

  • giá trị khác không một0
  • một danh sách không trống / mảng / vectơ / ... của " deltas nhân " khác không

Đầu ra là một danh sách / mảng / vector / ... các giá trị như vậy mà yếu tố đầu tiên là một0 và cho đó là " đồng bằng châu thổ nhân giống " là những đầu vào.

Lưu ý: Nếu ngôn ngữ của bạn không có hỗ trợ của số nguyên âm, bạn có thể thay thế khác không bằng cách tích cực .

Các trường hợp thử nghiệm

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]

Chúng tôi có thể lấy một danh sách duy nhất có độ dài 1 + số deltas không, trong đó mục đầu tiên là a₀?
Adám

@ Adám: Tôi sẽ nói không với điều đó bởi vì nó sẽ thay đổi mọi thứ cho câu trả lời hiện có.
ბიმო

Câu trả lời:


17

Haskell, 8 byte

scanl(*)

Hãy thử trực tuyến!


Tôi đang kiểm tra xem có ai viết bài này không, và tôi nghĩ không ai viết nó và tôi nói "tuyệt, sau đó tôi sẽ viết" và sau đó thấy câu trả lời của bạn ở cuối trang. nâng cao.
Bánh quy cối xay gió

9

APL (Dyalog), 3 byte

×\∊

Hãy thử trực tuyến!

Nếu tôi phải lấy số ở bên trái và mảng bên phải:

-2 cảm ơn @ H.PWiz

7 5 3 byte

×\,


2
⊣,⊢chỉ có thể là,
H.PWiz

@ H.PWiz cảm ơn, ngầm của tôi cực kỳ yếu
Quintec

Bạn không cần parens; ×\,đánh giá một chức năng.
Dennis


Bạn không cần phải đếm số parens, vì chúng không cần thiết trong một số trường hợp. f←×\làm việc, ví dụ. Btw, (-12 3 -17 1311)trong permalink của bạn nên được (¯12 3 ¯17 1311).
Dennis

8

R , 15 byte

cumprod(scan())

Hãy thử trực tuyến!

Chương trình đầy đủ. Chức năng dài hơn (trừ khi chúng ta được phép "dán" các đầu vào lại với nhau, do đó, tích hợp cumprodsẽ đủ là một câu trả lời hoàn chỉnh):

R , 28 byte

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

Hãy thử trực tuyến!




3

Japt, 3 byte

å*V

Thử nó


Giải trình

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







1

Mẻ, 69 byte

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

một0




1

05AB1E , 5 3 byte

šηP

-2 byte nhờ @BMO .

Dùng thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

š      # 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
Không, sđã ở đó để có được đầu vào khác. :) slà trao đổi, và šđang chuẩn bị ở đầu danh sách. Dù bằng cách nào, cảm ơn vì -2
Kevin Cruijssen

1

Bình thường, 6 byte

*FR._s

Kiểm tra cái đó ở đây!

Ngoài ra, 7 byte:

.u*NYEQ

Kiểm tra nó ở đây!

Cái đầu tiên lấy đầu vào là một tuple, cái thứ hai lấy đầu vào là hai dòng riêng biệt.

Cảm ơn @Sok đã giúp tôi có được bản đồ tốt và tiết kiệm 1 byte.


1
Bạn có thể lưu một byte bằng cách triển khai bản đồ trong giải pháp thứ hai R, như trong *FR._s- trình diễn
Sok

@Sok Bắt đẹp quá! Tôi đã cố gắng Mgiả định rằng nó hoạt động, sau đó bị lỗi phân tích đường - chủ yếu là vì tôi không nhớ cách phân tích cú pháp để F <pf2>làm việc.
Steven H.

Tôi sẽ thành thật, tôi không thực sự hiểu cách lồng nhauM ,F , L, và Rcông việc, tôi chỉ cố gắng một bó cho đến khi một làm việc: o)
Sok

1

Python 2 , 40 byte

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

Hãy thử trực tuyến!

Đáng ngạc nhiên, việc chuyển sang Python 3 và sử dụng các trình tạo ở đó chỉ tiết kiệm 1 byte so với giải pháp đệ quy.


1

PowerShell , 29 byte

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

Hãy thử trực tuyến!

Giả định này chỉ xuất ra các giá trị là tốt.

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

Nếu điều đó không ổn, điều này thực sự xây dựng danh sách và sau đó đẩy nó sangString mà in theo cùng một cách.

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

Các quy tắc là : Output is a list/array/vector/. Vì vậy, đầu tiên là tốt.
mê mẩn

1

MathGolf , 6 5 byte

\{\o*

Hãy thử trực tuyến!

Tôi nghĩ rằng điều này có thể là 5 byte ( \{\o*) nhưng \hướng dẫn có vẻ hơi sai khi xử lý đầu vào. Điều này hiện đã được sửa trong phiên bản mới nhất.

Giải trình:

\       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

Tôi đã thiết kế lại việc xử lý `` với đầu vào ẩn. Nó vẫn xử lý các mục trên ngăn xếp theo cùng một cách, nhưng bây giờ nó xuất hiện hai phần tử từ đầu vào lên ngăn xếp thay vì chỉ một. Tôi nghĩ nó có thể hữu ích cho thử thách này.
maxb


0

Than , 12 byte

IE⁺⟦N⟧AΠ⊞Oυι

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

    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}

Hãy thử trực tuyến!

Tham gia số đầu tiên vào đầu vào thứ hai dưới dạng danh sách, sau đó trả về kết quả nhân liên tiếp

Các trường hợp thử nghiệm

Nhập đầu vào của bạn sau chức năng như bên dưới và sau đó chạy, vì tôi không chắc cách sử dụng đầu vào đúng cho ngôn ngữ này trong TiO

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.