Jumlah kumulatif [N] yang digabungkan secara rekursif dengan iterasi M

14

Ambil dua bilangan bulat positif Ndan Mdan buat jumlah kumulatif gabungan [N], dengan Miterasi. Keluarkan hasil dari iterasi terakhir.

Definisi jumlah kumulatif gabungan:

  1. Mulai dengan angka Ndan tentukan urutanX = [N]
  2. Tambahkan ke Xjumlah kumulatifX
  3. Ulangi langkah 2 Mkali.

Jumlah kumulatif vektor, X = [x1, x2, x3, x4]adalah: [x1, x1+x2, x1+x2+x3, x1+x2+x3+x4].

Contoh dengan N = 1dan M = 4:

P = fungsi jumlah kumulatif.

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]

Perhatikan bahwa yang pertama X = [1]tidak dihitung sebagai iterasi. Anda dapat memilih untuk mengambil M = 5contoh di atas (sehingga dihitung X = [1]sebagai satu iterasi).

Ini adalah OEIS A107946


Kasus uji:

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

Ini , jadi kode terpendek menang. Input dan output format opsional.

CG.
sumber
Sudah agak terlambat sekarang, tetapi apakah Nbenar - benar menambah sesuatu ke masalah? Hanya faktor konstan yang Anda gandakan hasilnya.
Martin Ender

Jawaban:

7

Haskell , 35 byte

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

Cobalah online!

Terima kasih kepada H.PWiz untuk -18 byte

Mego
sumber
tail.scanl(+)0bisascanl1(+)
H.PWiz
@ H.PWiz Terima kasih, saya selalu lupa tentang *1versi scandanfold .
Mego
45 byte
H.PWiz
1
35 byte menggunakaniterate
H.PWiz
Saya hanya akan meninggalkan penjelasan - terlalu banyak upaya untuk mengubahnya setiap waktu: P
Mego
6

05AB1E , 7 byte

¸IFDηO«

Cobalah online!

Penjelasan

¸         # wrap input_1 in a list
 IF       # input_2 times do:
   D      # duplicate the list
    η     # get prefixes of the list
     O    # sum the prefixes
      «   # concatenate to the current list
Emigna
sumber
6

Sekam , 9 8 7 byte

Terima kasih kepada H.PWiz untuk menghemat 1 byte.

!¡S+G+;

Cobalah online!

Menggunakan berbasis 1 M.

Penjelasan

      ;     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.
Martin Ender
sumber
Apakah pendekatan saya juga, saya tidak yakin apakah itu golf. Juga, saya sudah menyarankan untuk cumsumtidak mengembalikan yang terkemuka 0(sesuatu yang akan menghemat 2 byte dalam kasus ini)
Erik the Outgolfer
Bisa ot∫menjadi G+?
H.PWiz
@ H.PWiz Hmm ... dokumen tampaknya tidak jelas tentang itu (AFAIK "pemindaian" berarti "mengurangi" bukan "pengurangan kumulatif").
Erik the Outgolfer
Fpengurangan adalah pengurangan Gkumulatif
H.PWiz
5

MATL , 6 byte

:"tYsh

Inputnya M, lalu N.

Cobalah online! Atau verifikasi semua kasus uji .

Penjelasan

:"      % 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
Luis Mendo
sumber
3
Whaaaaat? Saya yakin saya sudah mencobanya 100 kali. Saya bahkan mencoba mengunjungi situs Suever untuk memastikan itu bukan kesalahan aneh pada TIO ... Saya sama sekali tidak mengerti ini ...
Stewie Griffin
2
Saya tidak bisa berhenti memikirkan ini ... Saya benar-benar yakin saya telah menulis karakter yang tepat berulang kali dan mencoba menjalankannya di dua situs yang berbeda, tanpa hasil. Karena itu tidak mungkin terjadi, satu-satunya penjelasan yang tersisa adalah aku menjadi gila ... Ini benar-benar mengacaukan kepalaku!
Stewie Griffin
3

Python 2 , 83 78 75 71 65 63 60 byte

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

Cobalah online!

Disimpan 6 8 byte berkat Rod
Tersimpan 3 byte berkat Erik

TFeld
sumber
@Rod Terima kasih banyak: D
TFeld
Anda tidak perlu [:], radalah tuple.
Erik the Outgolfer
@EriktheOutgolfer, terima kasih, ini adalah sisa dari ketika r adalah daftar
TFeld
3

Dyalog APL , 12 byte

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

Mengambil N di sisi kanan dan M di sebelah kiri. CobaAPL di sini!

Penjelasan:

{(⊢,+\)⍣⍺⊢⍵}
{          } 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
dzaima
sumber
Sukai penjelasannya. Sangat jelas apa yang terjadi. Sebaliknya, sulit untuk memahami APL: P
Emigna
2

Java (OpenJDK 8) , 194 181 175 163 134 110 byte

(n,m)->{int a[]=new int[1<<m],c=1,i;for(a[0]=n;m-->0;)for(n=0;2*n<c;c++)for(i=++n;i-->0;a[c]+=a[i]);return a;}

Cobalah online!

Roberto Graham
sumber
2
110 byte:(n,m)->{int a[]=new int[1<<m],c=1,i;for(a[0]=n;m-->0;)for(n=0;2*n<c;c++)for(i=++n;i-->0;a[c]+=a[i]);return a;}
Nevay
1

Dyalog APL , 19 byte

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

Cobalah online!

Fungsi diad, dengan Ndi kanan dan Mdi kiri.

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

R , 46 byte

function(N,M){for(i in 1:M)N=c(N,cumsum(N))
N}

Cobalah online!

Giuseppe
sumber
0

JavaScript (ES6), 55 54 byte

Mengambil input dalam sintaks currying (m)(n).

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

Uji kasus

Arnauld
sumber
0

Jelly , 5 byte

;+\$¡

Cobalah online!

Versi yang disarankan oleh Dennis (pengembalian nbukan [n]untuk array singleton).

Erik the Outgolfer
sumber
Wdan bisa dihapus.
Dennis
@ Dennis Saya khawatir hasilnya tidak akan benar? Saya memikirkannya tetapi jika saya mendapatkan input 1dan 0saya khawatir saya akan kembali 1daripada [1]jika saya menghapusnya, dan saya tidak dapat menggunakan program lengkap, karena outputnya masih akan seperti itu.
Erik the Outgolfer
1adalah bagaimana Jelly menampilkan array [1]. Saya tidak melihat masalah dengan itu.
Dennis
@ Dennis Hmm ... sedikit curiga dengan itu (seperti yang saya katakan di bagian terakhir dari komentar saya di atas) ... apakah ada konsensus yang mengizinkannya, atau apakah itu akan dianggap sebagai "tipe standar penyalahgunaan jalur data"?
Erik the Outgolfer
Kedua format itu ok.
CG.
0

Clojure, 67 byte

#(loop[c[%]i %2](if(= i 0)c(recur(into c(reductions + c))(dec i))))
NikoNyrh
sumber