M yinelemeleriyle [N] özyinelemeli olarak birleştirilen kümülatif toplamlar


14

İki pozitif tamsayılar alın Nve Mve birleştirilmiş kümülatif toplamları oluşturmak [N]ile, Mtekrarlamalar. Son yinelemenin sonucunu çıktılar.

Birleştirilmiş toplamın tanımı:

  1. Bir sayı ile başlayın ve bir dizi NtanımlayınX = [N]
  2. XKümülatif toplamlarına ekleyin .X
  3. 2. adımı tekrarlayın M.

Bir vektör kümülatif toplamı, X = [x1, x2, x3, x4]bir: [x1, x1+x2, x1+x2+x3, x1+x2+x3+x4].

Örnek N = 1ve M = 4:

P = birikimli toplam fonksiyonu.

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]

Birincisinin X = [1]yineleme olarak sayılmadığını unutmayın . M = 5Yukarıdaki örneği almayı seçebilirsiniz (böylece X = [1]tek bir yineleme olarak sayılır ).

Bu OEIS A107946


Test senaryoları:

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

Bu , bu yüzden en kısa kod kazanır. İsteğe bağlı giriş ve çıkış formatları.


Şimdi biraz geç ama Nsoruna gerçekten bir şey katıyor mu? Sonucu çarptığınız sabit bir faktör.
Martin Ender

Yanıtlar:



6

05AB1E , 7 bayt

¸IFDηO«

Çevrimiçi deneyin!

açıklama

¸         # 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

Kabuk , 9 8 7 bayt

1 byte tasarruf sağladığı için H.PWiz'e teşekkürler.

!¡S+G+;

Çevrimiçi deneyin!

1 tabanlı kullanır M.

açıklama

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

Benim yaklaşımım da, golf olup olmadığından emin değilim. Ayrıca, zaten ettik önerilen için cumsumlider dönmemeyi 0(bu durumda 2 bayt kurtaracak bir şey).
Outgolfer Erik

Can ot∫olmak G+?
H.PWiz

@ H.PWiz Hmm ... dokümanlar bu konuda net görünmüyor (AFAIK "taraması" "kümülatif azaltma" değil "azaltma" anlamına gelir).
Outgolfer Erik

Fazaltmak Gbirikimli azaltmak olduğunu
H.PWiz

5

MATL , 6 bayt

:"tYsh

Girdiler Mo zaman N.

Çevrimiçi deneyin! Veya tüm test senaryolarını doğrulayın .

açıklama

:"      % 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? Eminim bunu 100 kez denedim. Hatta TIO'da garip bir hata olmadığından emin olmak için Suever'in sitesine gitmeye çalıştım ... Bunu hiç anlamıyorum ...
Stewie Griffin

2
Bunu düşünmeyi bırakamıyorum ... Kesinlikle bu karakterleri tekrar tekrar yazdığımı ve başarılı olmadan iki farklı sitede çalıştırmayı denediğimden eminim. Durum böyle olamayacağından, geriye kalan tek açıklama deli olacağım ... Bu gerçekten kafamı karıştırıyor!
Stewie Griffin


3

Python 2 , 83 78 75 71 65 63 60 bayt

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

Çevrimiçi deneyin!

Kaydedilen 6 8 çubuk sayesinde bayt
Kurtarılan Erik 3 bayt sayesinde


@Rod Daha fazla teşekkürler: D
TFeld 06

Buna gerek yok [:], rbir olduğunu tuple.
Outgolfer Erik

@EriktheOutgolfer, teşekkürler, r bir liste olduğu zaman kalan
TFeld

3

Dyalog APL , 12 bayt

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

Sağ tarafta N ve solda M alır. TryAPL burada!

Açıklama:

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

Açıklamayı seviyorum. Neler olduğu çok açık. Aksi takdirde
APL'yi

2

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

(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;}

Çevrimiçi deneyin!


2
110 bayt:(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 bayt

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

Çevrimiçi deneyin!

İkili işlev, Nsağda ve Msolda.

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



0

JavaScript (ES6), 55 54 bayt

Körili sözdiziminde girdi alır (m)(n).

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

Test senaryoları


0

Jöle , 5 bayt

;+\$¡

Çevrimiçi deneyin!

Dennis tarafından önerilen sürüm ( tekli diziler nyerine döndürür [n]).


Wve çıkarılabilir.
Dennis

@Dennis korkarım çıktı o zaman doğru olmayacak? Bunu düşündüm ama girdi alırsam 1ve 0korkarım bunları kaldırmam 1yerine geri döneceğim [1]ve çıktısı hala böyle olacağı için bunun yerine tam bir program kullanamıyorum.
Outgolfer Erik

1Jelly diziyi böyle gösterir [1]. Bununla ilgili bir sorun görmüyorum.
Dennis

@Dennis Hmm ... buna biraz şüpheli (yukarıdaki yorumumun son bölümünde söylediğim gibi) ... buna izin veren bir fikir birliği var mı, yoksa "standart boşlukları kötüye kullanan veri türleri" olarak sayılır mı?
Outgolfer Erik

Her iki biçim de tamam.
CG.

0

Clojure, 67 bayt

#(loop[c[%]i %2](if(= i 0)c(recur(into c(reductions + c))(dec i))))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.