ผลรวมสะสมแบบวนซ้ำของ [N] ด้วยการวนซ้ำ M


14

ใช้จำนวนเต็มบวกสองจำนวนNแล้วMสร้างผลบวกสะสม[N]โดยมีMการวนซ้ำ เอาต์พุตผลลัพธ์ของการวนซ้ำล่าสุด

คำจำกัดความของผลรวมสะสมตัดแบ่ง:

  1. เริ่มต้นด้วยตัวเลขNและกำหนดลำดับX = [N]
  2. ผนวกกับXผลรวมสะสมของX
  3. ทำซ้ำขั้นตอนที่ 2 Mครั้ง

ผลรวมสะสมของเวกเตอร์X = [x1, x2, x3, x4]คือ: [x1, x1+x2, x1+x2+x3, x1+x2+x3+x4].

ตัวอย่างด้วยN = 1และM = 4:

P = ฟังก์ชันผลรวมสะสม

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]

โปรดทราบว่าครั้งแรกX = [1]ไม่นับเป็นการทำซ้ำ คุณอาจเลือกที่จะM = 5ยกตัวอย่างข้างต้น (นับX = [1]เป็นหนึ่งซ้ำ)

นี่คือOEIS A107946


กรณีทดสอบ:

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

นี่คือดังนั้นรหัสที่สั้นที่สุดจึงชนะ รูปแบบอินพุตและเอาต์พุตเสริม


มันสายเกินไปแล้ว แต่จะNเพิ่มอะไรอีกหรือไม่ เป็นเพียงปัจจัยคงที่ที่คุณคูณผลลัพธ์ด้วย
Martin Ender

คำตอบ:


7

Haskell , 35 ไบต์

n!m=iterate((++)<*>scanl1(+))[n]!!m

ลองออนไลน์!

ขอบคุณ H.PWiz สำหรับ -18 ไบต์


tail.scanl(+)0สามารถscanl1(+)
H.PWiz

@ H.PWiz ขอบคุณฉันมักจะลืมเกี่ยวกับ*1รุ่นและscan fold
Mego


1
35 bytesใช้iterate
H.PWiz

ฉันจะทิ้งคำอธิบายไว้ - ความพยายามมากเกินไปที่จะเปลี่ยนมันทุกครั้ง: P
Mego


6

แกลบ , 9 8 7 ไบต์

ขอบคุณ H.PWiz สำหรับการบันทึก 1 ไบต์

!¡S+G+;

ลองออนไลน์!

การใช้ M1-based

คำอธิบาย

      ;     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.

เป็นแนวทางของฉันด้วยฉันไม่แน่ใจว่ามันสามารถตีกอล์ฟได้หรือไม่ นอกจากนี้ผมได้อยู่แล้วแนะนำสำหรับการcumsumที่จะไม่กลับชั้นนำ0(อะไรบางอย่างที่จะช่วยประหยัด 2 ไบต์ในกรณีนี้)
Erik the Outgolfer

สามารถot∫เป็นG+?
H.PWiz

@ H.PWiz อืม ... เอกสารดูเหมือนจะไม่ชัดเจนในเรื่องนั้น (AFAIK "สแกน" หมายถึง "ลด" ไม่ใช่ "ลดการสะสม")
Erik the Outgolfer

FคือการลดคือการลดGสะสม
H.PWiz

5

MATL , 6 ไบต์

:"tYsh

ปัจจัยการผลิตที่มีแล้วMN

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย

:"      % 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
Whaaaaat? ฉันแน่ใจว่าฉันได้ลองแล้ว 100 ครั้ง ฉันได้ลองไปที่เว็บไซต์ของ Suever เพื่อให้แน่ใจว่าไม่ใช่ข้อผิดพลาดแปลก ๆ ใน TIO ... ฉันไม่เข้าใจสิ่งนี้เลย ...
Stewie Griffin

2
ฉันไม่สามารถหยุดคิดเกี่ยวกับเรื่องนี้ ... ฉันแน่ใจว่าฉันเขียนตัวละครที่แน่นอนเหล่านี้ซ้ำแล้วซ้ำอีกและพยายามที่จะใช้มันในสองเว็บไซต์ที่แตกต่างกันโดยไม่ประสบความสำเร็จ คำอธิบายเดียวที่เหลืออยู่ก็คือฉันจะเป็นบ้า ... มันยุ่งกับหัวของฉันจริงๆ!
Stewie Griffin


3

Python 2 , 83 78 75 71 65 63 60 ไบต์

def f(n,m):r=n,;exec"s=0\nfor c in r:s+=c;r+=s,\n"*m;print r

ลองออนไลน์!

บันทึกแล้ว6 8 ไบต์ขอบคุณ Rod
บันทึกแล้ว 3 ไบต์ขอบคุณ Erik


@Rod ขอบคุณมาก: D
TFeld

คุณไม่จำเป็นต้อง[:], เป็นr tuple
Erik the Outgolfer

@EriktheOutgolfer ขอบคุณมันเป็นส่วนที่เหลือจากเมื่อ r เป็นรายการ
TFeld

3

Dyalog APLขนาด 12 ไบต์

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

ใช้ N ทางด้านขวาและ M ทางด้านซ้าย ลองใช้ตรงนี้!

คำอธิบาย:

{(⊢,+\)⍣⍺⊢⍵}
{          } 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

ชอบคำอธิบาย ชัดเจนมากว่าเกิดอะไรขึ้น APL ที่เข้าใจยาก: P
Emigna






0

เยลลี่ 5 ไบต์

;+\$¡

ลองออนไลน์!

รุ่นที่แนะนำโดยDennis (คืนค่าnแทนที่จะ[n]เป็นอาร์เรย์แบบซิงเกิล)


Wและสามารถลบออกได้
Dennis

@Dennis ฉันกลัวว่าผลลัพธ์จะไม่ถูกต้องใช่มั้ย ฉันคิดถึงมัน แต่ถ้าฉันได้รับอินพุต1และ0ฉันกลัวว่าฉันจะกลับมา1แทน[1]ถ้าฉันลบสิ่งเหล่านั้นออกและฉันไม่สามารถใช้โปรแกรมเต็มรูปแบบแทนได้เนื่องจากเอาต์พุตของมันจะเป็นเช่นนั้น
Erik the Outgolfer

1[1]เป็นวิธีการที่วุ้นแสดงอาร์เรย์ ฉันไม่เห็นปัญหากับสิ่งนั้น
Dennis

@Dennis Hmm ... น่าสงสัยเล็กน้อย (เช่นที่ฉันพูดในส่วนสุดท้ายของความคิดเห็นของฉันด้านบน) ... มีฉันทามติที่อนุญาตหรือไม่หรือจะนับว่าเป็น "มาตรฐานช่องโหว่การละเมิดประเภทข้อมูล"
Erik the Outgolfer

ทั้งสองรูปแบบก็โอเค
CG

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