Tổng tích lũy đệ quy của [N] với M lặp


14

Lấy hai số nguyên dương NMtạo các tổng tích lũy liên kết của [N], với các Mlần lặp. Xuất kết quả của lần lặp cuối cùng.

Định nghĩa tổng tích lũy nối:

  1. Bắt đầu với một số Nvà xác định một chuỗiX = [N]
  2. Nối vào Xcác khoản tiền tích lũy củaX
  3. Lặp lại bước 2 Mlần.

Tổng tích lũy của một vectơ, X = [x1, x2, x3, x4]là : [x1, x1+x2, x1+x2+x3, x1+x2+x3+x4].

Ví dụ với N = 1M = 4:

P = hàm tổng tích lũy.

M = 0: [1]
M = 1: [1, 1]                    -  X = [1, P(1)] = [[1], [1]]      
M = 2: [1, 1, 1, 2]              -  X = [X, P(X)] = [[1, 1], [1, 2]]
M = 3: [1, 1, 1, 2, 1, 2, 3, 5]  -  X = [X, P(X)] = [[1, 1, 1, 2], [1, 2, 3, 5]]
M = 4: [1, 1, 1, 2, 1, 2, 3, 5, 1, 2, 3, 5, 6, 8, 11, 16]

Lưu ý rằng lần đầu tiên X = [1]không được tính là lần lặp. Bạn có thể chọn lấy M = 5ví dụ trên (do đó được tính X = [1]là một lần lặp).

Đây là OEIS A107946


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

N = 5, M = 1
5, 5

N = 2, M = 3
2, 2, 2, 4, 2, 4, 6, 10

N = 4, M = 6
4, 4, 4, 8, 4, 8, 12, 20, 4, 8, 12, 20, 24, 32, 44, 64, 4, 8, 12, 20, 24, 32, 44, 64, 68, 76, 88, 108, 132, 164, 208, 272, 4, 8, 12, 20, 24, 32, 44, 64, 68, 76, 88, 108, 132, 164, 208, 272, 276, 284, 296, 316, 340, 372, 416, 480, 548, 624, 712, 820, 952, 1116, 1324, 1596

Đây là , vì vậy mã ngắn nhất sẽ thắng. Tùy chọn định dạng đầu vào và đầu ra.


Bây giờ đã quá muộn, nhưng Nthực sự có thêm vấn đề gì không? Nó chỉ là một yếu tố không đổi mà bạn nhân kết quả với.
Martin Ender

Câu trả lời:




6

Husk , 9 8 7 byte

Cảm ơn H.PWiz vì đã tiết kiệm 1 byte.

!¡S+G+;

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

Sử dụng 1 dựa trên M .

Giải trình

      ;     Wrap N in a list to get [N].
 ¡          Iterate the following function on this list and collect
            the results in an infinite list.
  S+        Concatenate the current value with...
    G+      ...the cumulative sum. We're not using the cumsum built-in ∫ 
            because it prepends a zero.
!           Use M as an index into the infinite list.

Có phải cách tiếp cận của tôi cũng vậy, tôi không chắc nó có thể chơi được không. Ngoài ra, tôi đã gợi ý cho cumsumkhông trả về một hàng đầu 0(một cái gì đó mà sẽ tiết kiệm 2 byte trong trường hợp này).
Erik the Outgolfer

Có thể ot∫được G+không?
H.PWiz

@ H.PWiz Hmm ... các tài liệu dường như không rõ ràng về điều đó (AFAIK "quét" có nghĩa là "giảm" chứ không phải "giảm tích lũy").
Erik the Outgolfer

Fgiảm Glà tích lũy giảm
H.PWiz

5

MATL , 6 byte

:"tYsh

Đầu vào là M, sau đó N.

Hãy 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

:"      % Implicitly input M. Do the following M times
  t     %   Implicitly input N the first time. Duplicate
  Ys    %   Cumulative sum
  h     %   Concatenate horizontally
        % Implicitly end loop. Implicitly display stack

3
Ai vậy? Tôi chắc chắn tôi đã thử 100 lần. Tôi thậm chí đã thử truy cập trang web của Suever để đảm bảo rằng đó không phải là một lỗi lạ trên TIO ... Tôi hoàn toàn không hiểu điều này ...
Stewie Griffin

2
Tôi không thể ngừng suy nghĩ về điều này ... Tôi chắc chắn rằng tôi đã viết đi viết lại những ký tự chính xác đó và cố gắng chạy nó trên hai trang web khác nhau, nhưng không thành công. Vì đó không phải là trường hợp, nên lời giải thích duy nhất còn lại là tôi đang phát điên ... Điều này thực sự gây rối với đầu tôi!
Stewie Griffin



3

APL Dyalog , 12 byte

{(⊢,+\)⍣⍺⊢⍵}

Mất N ở bên phải và M ở bên trái. Hãy thử tại đây!

Giải trình:

{(⊢,+\)⍣⍺⊢⍵}
{          } an anonymous function
 (⊢,+\)      a train for a single iteration:
             the right argument
   ,          concatenated with
    +\        the cumulative sum 
            repeated
             left argument times
         ⊢⍵  on the right argument

Yêu lời giải thích. Rất rõ ràng những gì đang xảy ra. Khó hiểu APL khác: P
Emigna


1

APL Dyalog , 19 byte

{0=⍺:⍵⋄(⍺-1)∇⍵,+\⍵}

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

Chức năng Dyadic, với Nbên phải và Mbên trái.

{
    0=⍺: ⍵         ⍝ if a = 0 return
    (⍺-1) ∇ ⍵,+\⍵  ⍝ recurse with the array
                   ⍝ joined with its cumsum (+\⍵)
}



0

JavaScript (ES6), 55 54 byte

Đưa đầu vào theo cú pháp currying (m)(n).

m=>g=a=>m--?g([...a=+a?[a]:a,...a.map(x=>s+=x,s=0)]):a

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


0

Thạch , 5 byte

;+\$¡

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

Phiên bản được đề xuất bởi Dennis (trả về nthay vì [n]cho mảng đơn).


Wcó thể được gỡ bỏ.
Dennis

@Dennis Tôi sợ đầu ra sẽ không đúng? Tôi đã nghĩ về nó nhưng nếu tôi nhận được đầu vào 10tôi sợ tôi sẽ quay trở lại 1thay vì [1]nếu tôi loại bỏ chúng và tôi không thể sử dụng một chương trình đầy đủ thay thế, vì đầu ra của nó vẫn như vậy.
Erik the Outgolfer

1là cách Jelly hiển thị mảng [1]. Tôi thấy không có vấn đề với điều đó.
Dennis

@Dennis Hmm ... một chút nghi ngờ về điều đó (như tôi đã nói ở phần cuối của nhận xét của tôi ở trên) ... có sự đồng thuận nào cho phép nó không, hay nó sẽ được tính là "lỗ hổng tiêu chuẩn lạm dụng các kiểu dữ liệu"?
Erik the Outgolfer

Cả hai định dạng đều ổn.
CG.

0

Clojure, 67 byte

#(loop[c[%]i %2](if(= i 0)c(recur(into c(reductions + c))(dec i))))
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.