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.


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

Jawaban:



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

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.

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

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


@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

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!


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 (+\⍵)
}



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


0

Jelly , 5 byte

;+\$¡

Cobalah online!

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


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))))
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.