Cetak urutan N-bonacci

54

Ini tidak diketahui secara luas, tetapi apa yang kita sebut urutan Fibonacci, AKA

1, 1, 2, 3, 5, 8, 13, 21, 34...

sebenarnya disebut deret Duonacci . Ini karena untuk mendapatkan nomor berikutnya, Anda menjumlahkan 2 angka sebelumnya. Ada juga deret Tribonacci ,

1, 1, 1, 3, 5, 9, 17, 31, 57, 105, 193, 355, 653, 1201...

karena angka selanjutnya adalah jumlah dari 3 angka sebelumnya. Dan urutan Quadronacci

1, 1, 1, 1, 4, 7, 13, 25, 49, 94, 181, 349, 673...

Dan favorit semua orang, urutan Pentanacci :

1, 1, 1, 1, 1, 5, 9, 17, 33, 65, 129...

Dan Hexanacci urutan, yang Septanacci urutan, yang Octonacci urutan, dan seterusnya dan sebagainya sampai dengan urutan N-Bonacci.

Urutan N-bonacci akan selalu dimulai dengan N 1s berturut-turut.

Tantangan

Anda harus menulis fungsi atau program yang mengambil dua angka N dan X , dan mencetak angka X N-Bonacci pertama. N akan menjadi bilangan bulat yang lebih besar dari 0, dan Anda dapat dengan aman menganggap tidak ada angka N-Bonacci yang akan melebihi tipe angka default dalam bahasa Anda. Outputnya bisa dalam format apa pun yang dapat dibaca manusia, dan Anda dapat mengambil input dengan cara apa pun yang masuk akal. (Argumen baris perintah, argumen fungsi, STDIN, dll.)

Seperti biasa, ini adalah Code-golf, jadi celah standar berlaku dan jawaban terpendek dalam byte menang!

Contoh IO

#n,  x,     output
 3,  8  --> 1, 1, 1, 3, 5, 9, 17, 31
 7,  13 --> 1, 1, 1, 1, 1, 1, 1, 7, 13, 25, 49, 97, 193
 1,  20 --> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
 30, 4  --> 1, 1, 1, 1       //Since the first 30 are all 1's
 5,  11 --> 1, 1, 1, 1, 1, 5, 9, 17, 33, 65, 129
DJMcMayhem
sumber
1
Sobat, saya punya ide ini beberapa waktu lalu dan tidak pernah sempat menuliskannya.
Morgan Thrapp
9
Tombol suara saya == avatar Anda
ETHproduksi
Bukankah 3-bonacci akan 1, 1, 2, 4, 7seperti posisi ketiga 0 + 1 + 1? ... dan jadi satu dengan yang lain?
Payung
1
@umbrella Tidak, tribonacci dimulai dengan 3 1s. Lihat hasil edit saya untuk memperjelas hal ini.
DJMcMayhem

Jawaban:

23

Boolfuck, 6 byte

,,[;+]

Anda dapat dengan aman mengasumsikan tidak ada nomor N-Bonacci yang akan melebihi jenis nomor default dalam bahasa Anda.

Jenis angka default di Boolfuck sedikit. Dengan asumsi ini juga meluas ke angka input N dan X, dan mengingat bahwa N> 0, hanya ada dua input yang mungkin - 10 (yang tidak menghasilkan apa-apa) dan 11 (yang menghasilkan 1).

,membaca sedikit ke lokasi memori saat ini. N diabaikan sebagaimana mestinya 1. Jika X adalah 0, badan loop (dikelilingi oleh []) dilewati. Jika X adalah 1, itu adalah output dan kemudian dibalik ke 0 sehingga loop tidak berulang.

pengguna253751
sumber
4
Apakah tidak ada celah standar PERSIS seperti ini?
Stan Strum
1
@StanStrum Dari sebelum atau sesudah jawaban ini?
user253751
2
Saya percaya itu datang sebelumnya, saya periksa ... Meta Link ; Revisi pertama adalah 31 Januari 2016 pukul 13:44. Wow, tidak apa-apa! Saya dua hari libur. Meskipun, untuk menjadi keras kepala, suntingan terakhir untuk ini adalah 31 Jan 2016 pukul 16:06. Soooooo ya, tidak apa-apa di buku saya
Stan Strum
9

Python 2, 79 byte

n,x=input()
i,f=0,[]
while i<x:v=[sum(f[i-n:]),1][i<n];f.append(v);print v;i+=1

Cobalah online

Lambda
sumber
Coba ganti baris terakhir denganexec"v=[sum(f[i-n:]),1][i<n];f+=[v];print v;i+=1;"*x
Cyoce
8

Pyth, 13

<Qu+Gs>QGEm1Q

Test Suite

Membawa input baris baru terpisah, dengan yang npertama.

Penjelasan:

<Qu+Gs>QGEm1Q  ##  implicit: Q = eval(input)
  u      Em1Q  ##  read a line of input, and reduce that many times starting with
               ##  Q 1s in a list, with a lambda G,H
               ##  where G is the old value and H is the new one
   +G          ##  append to the old value
     s>QG      ##  the sum of the last Q values of the old value
<Q             ##  discard the last Q values of this list
FryAmTheEggman
sumber
1
Wow, itu cepat. Saya hampir tidak punya waktu untuk menutup browser saya sebelum Anda sudah memposting ini!
DJMcMayhem
5

Haskell, 56 byte

g l=sum l:g(sum l:init l)
n#x|i<-1<$[1..n]=take x$i++g i

Contoh penggunaan: 3 # 8-> [1,1,1,3,5,9,17,31].

Bagaimana itu bekerja

i<-1<$[1..n]           -- bind i to n copies of 1
take x                 -- take the first x elements of
       i++g i          -- the list starting with i followed by (g i), which is
sum l:                 -- the sum of it's argument followed by
      g(sum l:init l)  -- a recursive call to itself with the the first element
                       -- of the argument list replaced by the sum
nimi
sumber
Tidak seharusnya menjadi tail lbukan init l?
haskeller bangga
@proudhaskeller: tidak masalah. kami menyimpan nelemen terakhir dalam daftar. Tidak ada perbedaan antara menghapus dari ujung dan menambahkan ke depan dan sebaliknya, yaitu menghapus dari depan dan menambahkan ke ujung, karena daftar awal hanya terdiri dari 1s.
nimi
Oh, aku mengerti. Itu cara yang bagus untuk menggantikan ++[]oleh :!
haskeller bangga
@proudhaskeller: ya, persis!
nimi
5

Python 2, 55 byte

def f(x,n):l=[1]*n;exec"print l[0];l=l[1:]+[sum(l)];"*x

Melacak njendela panjang urutan dalam daftar l, diperbarui dengan menambahkan jumlah dan menghapus elemen pertama. Mencetak elemen pertama setiap iterasi untuk xiterasi.

Pendekatan yang berbeda untuk menyimpan semua elemen dan menjumlahkan nilai terakhir nmemberikan panjang yang sama (55).

def f(x,n):l=[1]*n;exec"l+=sum(l[-n:]),;"*x;print l[:x]
Tidak
sumber
5

Javascript ES6 / ES2015, 107 97 85 80 Bytes

Terima kasih kepada @ user81655, @Neil dan @ETHproduk untuk menghemat beberapa byte


(i,n)=>eval("for(l=Array(i).fill(1);n-->i;)l.push(eval(l.slice(-i).join`+`));l")

coba online


Kasus uji:

console.log(f(3,  8))// 1, 1, 1, 3, 5, 9, 17, 31
console.log(f(7,  13))// 1, 1, 1, 1, 1, 1, 1, 7, 13, 25, 49, 97, 193
console.log(f(5,  11))// 1, 1, 1, 1, 1, 5, 9, 17, 33, 65, 129
gabrielperales
sumber
1
Bagus. Beberapa tips bermain golf: forselalu lebih baik daripada while, x.split('')-> [...x], ~~a-> +a, n-=1-> n--, jika Anda melampirkan seluruh badan fungsi di dalam tulisan yang evaltidak perlu Anda tulis return. Juga, bahkan lebih pendek dari [...'1'.repeat(i)]ini Array(i).fill(1)dan Anda dapat menghapus ~~dari adan b. Dan Anda diizinkan untuk menghapus f=.
user81655
2
Ini adalah apa yang tampak seperti dengan tips saya (85 bytes): (i,n)=>eval("for(l=Array(i).fill(1);n-->i;)l.push(l.slice(-i).reduce((a,b)=>a+b));l"). Saya mengubah urutan pernyataan, menggabungkan ke n--dalam n-idan menghapus ldari argumen untuk menghemat beberapa byte tambahan.
user81655
1
@ user81655 Saya tidak mendapatkan evaltabungan; (i,n)=>{for(l=Array(i).fill(1);n-->i;)l.push(l.slice(-i).reduce((a,b)=>a+b));return l}masih 85 byte.
Neil
@Neil Sepertinya 86 byte untuk saya ...
user81655
3
l.slice(-i).reduce((a,b)=>a+b)=>eval(l.slice(-i).join`+`)
ETHproduksi
4

ES6, 66 byte

(i,n)=>[...Array(n)].map((_,j,a)=>a[j]=j<i?1:j-i?s+=s-a[j+~i]:s=i)

Sedihnya maptidak akan membiarkan Anda mengakses array hasil di callback.

Neil
sumber
1
Simpan satu byte dengan menjelajah parameter.
Shaggy
4

Jelly, 12 byte

ḣ³S;
b1Ç⁴¡Uḣ

Cobalah online!

Bagaimana itu bekerja

b1Ç⁴¡Uḣ  Main link. Left input: n. Right input: x.

b1       Convert n to base 1.
    ¡    Call...
  Ç        the helper link...
   ⁴       x times.
     U   Reverse the resulting array.
      ḣ  Take its first x elements.


ḣ³S;     Helper link. Argument: A (list)

ḣ³       Take the first n elements of A.
  S      Compute their sum.
   ;     Prepend the sum to A.
Dennis
sumber
3

C ++ 11, 360 byte

Hai, saya suka pertanyaan ini. Saya tahu c ++ adalah bahasa yang sangat sulit untuk memenangkan kompetisi ini. Tapi aku akan melempar uang receh dengan cara apa pun.

#include<vector>
#include<numeric>
#include<iostream>
using namespace std;typedef vector<int>v;void p(v& i) {for(auto&v:i)cout<<v<<" ";cout<<endl;}v b(int s,int n){v r(n<s?n:s,1);r.reserve(n);for(auto i=r.begin();r.size()<n;i++){r.push_back(accumulate(i,i+s,0));}return r;}int main(int c, char** a){if(c<3)return 1;v s=b(atoi(a[1]),atoi(a[2]));p(s);return 0;}

Saya akan meninggalkan ini sebagai penjelasan yang dapat dibaca dari kode di atas.

#include <vector>
#include <numeric>
#include <iostream>

using namespace std;
typedef vector<int> vi;

void p(const vi& in) {
    for (auto& v : in )
        cout << v << " ";
    cout << endl;
}

vi bonacci(int se, int n) {
    vi s(n < se? n : se, 1);
    s.reserve(n);
    for (auto it = s.begin(); s.size() < n; it++){
        s.push_back(accumulate(it, it + se, 0));
    }
    return s;
}

int main (int c, char** v) {
    if (c < 3) return 1;
    vi s = bonacci(atoi(v[1]), atoi(v[2]));
    p(s);
    return 0;
}
hetepeperfan
sumber
Selamat datang di Programming Puzzles and Code Golf. Ini adalah jawaban yang baik, namun saya perhatikan bahwa Anda memiliki banyak spasi, dan nama variabel dan fungsi yang panjangnya lebih dari 1 karakter. Sebenarnya, ini adalah versi kode Anda yang mudah dibaca , tetapi Anda harus menambahkan versi golf. Ketika Anda melakukannya, saya akan memberi Anda upvote, tetapi sampai golf saya tidak akan.
wizzwizz4
@ wizzwizz4 Hai, menambahkan versi golf dari kode di atas. Saya meninggalkan kode tanpa tanda untuk membiarkan orang melihat bagaimana saya melakukannya. Selain itu saya suka membaca fungsi bonacci yang mengembalikan vi yang masih terdengar seperti vibonacci. Saya merasa saya tidak seharusnya membuat fungsi utama lebih pendek karena mandat standardard menggunakan int main (int, char **) sebagai titik masuk program. Lebih lanjut saya percaya semua variabel max 1 karakter panjang dan semua spasi putih tidak signifikan dihapus.
hetepeperfan
3
Ini bukan kode- "sesuai dengan standar". Ini adalah kode-golf . Kami memanipulasi dan memanfaatkan bahasa kami. Jika ada variabel ints, hapus int. Jika ada fungsi yang dipanggil foo, panggil saja f. Bersikap brutal; abaikan standar dan eksploitasi kompiler. Begitulah cara Anda bermain golf.
wizzwizz4
Permainan kata-kata dan kode bagus milik dalam kode ungolfed hanya . Tapi jangan ragu untuk menyimpannya di sana; sebenarnya, dianjurkan untuk. Tapi jadilah sangat, sangat kejam pada kompiler saat Anda memasukkan kode Anda. Dapatkan sekecil mungkin apa pun yang terjadi . (Oh, dan ini +1 yang saya janjikan!)
wizzwizz4
@ wizzwizz4 Apakah menghapus "int" valid? Saya pikir int tersirat tidak akan berjalan.
DJMcMayhem
3

Haskell , 47 byte

q(h:t)=h:q(t++[h+sum t])
n?x=take x$q$1<$[1..n]

Cobalah online!

<$ mungkin telah diperkenalkan ke Prelude setelah tantangan ini diposting.


Haskell , 53 byte

n%i|i>n=sum$map(n%)[i-n..i-1]|0<1=1
n?x=map(n%)[1..x]

Cobalah online!

Menentukan fungsi biner ?, digunakan seperti 3?8 == [1,1,1,3,5,9,17,31].

Fungsi bantu %secara rekursif menemukan ielemen th dari nurutan -bonacci dengan menjumlahkan nilai sebelumnya n. Kemudian, fungsi ?mentabulasikan nilai pertama xdari %.

Tidak
sumber
Jawaban lama, tetapi maksud Anda "Fungsi bantu %"?
Conor O'Brien
Mengganti penjaga akan berubah i<=nmenjadi i>n.
Ørjan Johansen
@ ØrjanJohansen Saya perhatikan itu juga saat mengedit, meskipun melihat kembali seluruh metode tampaknya buruk, jadi saya mungkin hanya melakukan kembali seluruh golf.
xnor
2

APL, 21

{⍵↑⍺{⍵,+/⍺↑⌽⍵}⍣⍵+⍺/1}

Ini adalah fungsi yang mengambil n sebagai argumen kiri dan x sebagai argumen kanannya.

Penjelasan:

{⍵↑⍺{⍵,+/⍺↑⌽⍵}⍣⍵+⍺/1}
                   ⍺/1  ⍝ begin state: X ones    
                  +     ⍝ identity function (to separate it from the ⍵)
    ⍺{         }⍣⍵     ⍝ apply this function N times to it with X as left argument
      ⍵,               ⍝ result of the previous iteration, followed by...
        +/              ⍝ the sum of
          ⍺↑            ⍝ the first X of
            ⌽          ⍝ the reverse of
             ⍵         ⍝ the previous iteration
 ⍵↑                    ⍝ take the first X numbers of the result

Kasus uji:

      ↑⍕¨ {⍵↑⍺{⍵,+/⍺↑⌽⍵}⍣⍵+⍺/1} /¨ (3 8)(7 13)(1 20)(30 4)(5 11)
 1 1 1 3 5 9 17 31                       
 1 1 1 1 1 1 1 7 13 25 49 97 193         
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
 1 1 1 1                                 
 1 1 1 1 1 5 9 17 33 65 129              
marinus
sumber
2

Python 3, 59

Disimpan 20 byte berkat FryAmTheEggman.

Bukan solusi yang bagus, tetapi akan bekerja untuk saat ini.

def r(n,x):f=[1]*n;exec('f+=[sum(f[-n:])];'*x);return f[:x]

Juga, ini beberapa contoh uji:

assert r(3, 8) == [1, 1, 1, 3, 5, 9, 17, 31]
assert r(7, 13) == [1, 1, 1, 1, 1, 1, 1, 7, 13, 25, 49, 97, 193]
assert r(30, 4) == [1, 1, 1, 1]
Morgan Thrapp
sumber
2

Java, 82 + 58 = 140 byte

Berfungsi untuk menemukan nomor ith n -bonacci ( 82 byte ):

int f(int i,int n){if(i<=n)return 1;int s=0,q=0;while(q++<n)s+=f(i-q,n);return s;}

Fungsi untuk mencetak pertama k n jumlah -bonacci ( 58 bytes ):

(k,n)->{for(int i=0;i<k;i++){System.out.println(f(i,n));}}
HyperNeutrino
sumber
2

Brain-Flak , 144 124 122 byte

-20 byte terima kasih kepada Nitroden

Ini jawaban Brain-Flak pertamaku, dan aku yakin itu bisa diperbaiki. Bantuan apa pun dihargai.

(([{}]<>)<{({}(()))}{}>)<>{({}[()]<<>({<({}<({}<>)<>>())>[()]}{})({}<><({({}<>)<>}<>)>)<>>)}{}<>{({}<{}>())}{}{({}<>)<>}<>

Cobalah online!

H.Piz
sumber
2

Pari / GP , 46 byte

Fungsi pembangkit urutan adalah:

(n-1)xnxn+1-2x+1-1x-1

(n,m)->Vec(n--/(x-(2-1/x)/x^n)-1/(x-1)+O(x^m))

Cobalah online!

alephalpha
sumber
1

Julia, 78 byte

f(n,x)=(z=ones(Int,n);while endof(z)<x push!(z,sum(z[end-n+1:end]))end;z[1:x])

Ini adalah fungsi yang menerima dua integer dan mengembalikan array integer. Pendekatannya sederhana: Hasilkan array yang panjangnya n, lalu tambah array dengan menambahkan jumlah nelemen sebelumnya sampai array memiliki panjang x.

Tidak Disatukan:

function f(n, x)
    z = ones(Int, n)
    while endof(z) < x
        push!(z, sum(z[end-n+1:end]))
    end
    return z[1:x]
end
Alex A.
sumber
1

MATL , 22 26 byte

1tiXIX"i:XK"tPI:)sh]K)

Ini menggunakan rilis saat ini (10.2.1) dari bahasa / kompiler.

Cobalah online!

Beberapa byte tambahan :-( karena bug di G fungsi (rekatkan input; sekarang diperbaiki untuk rilis berikutnya)

Penjelasan

1tiXIX"      % input N. Copy to clipboard I. Build row array of N ones
i:XK         % input X. Build row array [1,2,...X]. Copy to clipboard I
"            % for loop: repeat X times. Consumes array [1,2,...X]
  t          % duplicate (initially array of N ones)
  PI:)       % flip array and take first N elements
  sh         % compute sum and append to array
]            % end
K)           % take the first X elements of array. Implicitly display
Luis Mendo
sumber
1

Perl 6 , 38 byte

->\N,\X{({@_[*-N..*].sum||1}...*)[^X]} # 38 bytes
-> \N, \X {
  (

    {

      @_[
        *-N .. * # previous N values
      ].sum      # added together

      ||     # if that produces 0 or an error
      1      # return 1

    } ... *  # produce an infinite list of such values

  )[^X]      # return the first X values produced
}

Pemakaian:

# give it a lexical name
my &n-bonacci = >\N,\X{…}

for ( (3,8), (7,13), (1,20), (30,4), (5,11), ) {
  say n-bonacci |@_
}
(1 1 1 3 5 9 17 31)
(1 1 1 1 1 1 1 7 13 25 49 97 193)
(1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)
(1 1 1 1)
(1 1 1 1 1 5 9 17 33 65 129)
Brad Gilbert b2gills
sumber
1

C, 132 byte

Pendekatan rekursif lebih pendek dengan beberapa byte.

k,n;f(i,s,j){for(j=s=0;j<i&j++<n;)s+=f(i-j);return i<n?1:s;}main(_,v)int**v;{for(n=atoi(v[1]);k++<atoi(v[2]);)printf("%d ",f(k-1));}

Tidak disatukan

k,n; /* loop index, n */

f(i,s,j) /* recursive function */
{
    for(j=s=0;j<i && j++<n;) /* sum previous n n-bonacci values */
        s+=f(i-j);
    return i<n?1:s; /* return either sum or n, depending on what index we're at */
}

main(_,v) int **v;
{
    for(n=atoi(v[1]);k++<atoi(v[2]);) /* print out n-bonacci numbers */
        printf("%d ", f(k-1));
}
Cole Cameron
sumber
1

Sekam , 9 byte

↑§¡ȯΣ↑_B1

Cobalah online!

Mulai dari Base- 1representasi dari N (hanya daftar N yang) dan ¡teratively jumlah ( Σ) terakhir ( ↑_) N elemen dan menambahkan hasil ke dalam daftar. Akhirnya, ambil ( ) angka X pertama dalam daftar ini dan kembalikan.

Leo
sumber
1

R , 68 byte

function(n,x){a=1+!1:n;for(i in n+1:x){a[i]=sum(a[(i-n:1)])};a[1:x]}

Cobalah online!

Robert S.
sumber
0

Perl 6, 52 ~ 72 47 ~ 67 byte

sub a($n,$x){EVAL("1,"x$n~"+*"x$n~"...*")[^$x]}

Membutuhkan modul MONKEY-SEE-NO-EVAL, karena kesalahan berikut:

=== MAAF! === Kesalahan saat mengkompilasi -e
EVAL adalah fungsi yang sangat berbahaya !!! (gunakan MONKEY-SEE-NO-EVAL untuk mengesampingkan,
tetapi hanya jika Anda SANGAT yakin data Anda tidak mengandung serangan injeksi)
pada -e: 1

$ perl6 -MMONKEY-SEE-NO-EVAL -e'a(3,8).say;sub a($n,$x){EVAL("1,"x$n~"+*"x$n~"...*")[^$x]}'
(1 1 1 3 5 9 17 31)
andlrc
sumber
Adakah yang tahu cara mematikan mode ketat, dll?
andlrc
Saya pikir jika Anda menggunakan rilis Perl 6 pra-natal 2015, itu tidak memaksakan monyet-lihat-tidak-eval.
Batman
0

PHP , 78 byte

for(list(,$n,$x)=$argv;$i<$x;print${$i++}." ")$s+=$$i=$i<$n?1:$$d+$s-=${$d++};

Cobalah online!

-4 Bytes menggunakan PHP> = 7.1 [,$n,$x]sebagai gantilist(,$n,$x)

Jörg Hülsermann
sumber
0

Jq 1,5 , 67 byte

def C:if length>X then.[:X]else.+=[.[-N:]|add]|C end;[range(N)|1]|C

Mengasumsikan input yang disediakan oleh N dan X misalnya

def N: 5;
def X: 11;

Diperluas

def C:                        # . is current array
    if length>X               # stop when array is as long as X
    then .[:X]                # return first X elements
    else .+=[.[-N:]|add] | C  # recursively add sum of last N elements to array
    end
;
  [range(N)|1]                # initial state
| C

Cobalah online!

jq170727
sumber
0

J, 31 byte

]{.(],[:+/[{.])^:(-@[`]`(1#~[))

Tidak Disatukan:

] {. (] , [: +/ [ {. ])^:(-@[`]`(1 #~ [))

penjelasan

Saat-saat menyenangkan dengan kata kerja kekuatan dalam bentuk gerund-nya :

(-@[`]`(1 #~ [)) NB. gerund pre-processing

Rincian secara rinci:

  • ] {. ...Ambil <right arg>elemen pertama dari semua hal ini ke kanan yang berfungsi ...
  • <left> ^: <right>terapkan kata kerja <left>berulang <right>kali ... di mana <right>ditentukan oleh gerund tengah dalam (-@[] (1 #~ [), yaitu ], yaitu, arg kanan dilewatkan ke fungsi itu sendiri. Jadi apa <left>? ...
  • (] , [: +/ [ {. ])Argumen kiri untuk seluruh frasa ini pertama-tama ditransformasikan oleh gerund pertama, yaitu -@[,. Itu berarti argumen kiri untuk frasa ini adalah negatif dari argumen kiri ke fungsi keseluruhan. Ini diperlukan agar frasa [ {. ]mengambil elemen terakhir dari daftar kembali yang kita bangun. Mereka kemudian dijumlahkan: +/. Dan akhirnya ditambahkan ke daftar pengembalian yang sama: ] ,.
  • Jadi bagaimana daftar pengembalian diinisialisasi? Itulah yang dilakukan oleh gerund pra-pemrosesan ketiga: (1 #~ [)- ulangi 1 "arg kiri" beberapa kali.

Cobalah online!

Jonah
sumber
0

Mathematica, 59 byte

((f@#=1)&/@Range@#;f@n_:=Tr[f[n-#]&/@Range@#];f/@Range@#2)&

Anda mungkin ingin melakukan Clear@fpanggilan fungsi. Argumennya n,x, sama seperti kasus uji.

numbermaniac
sumber
0

Tidy , 36 byte

{x,n:n^recur(*tile(x,c(1)),sum@c,x)}

Cobalah online!

Penjelasan

{x,n:n^recur(*tile(x,c(1)),sum@c,x)}
{x,n:                              }   lambda taking parameters `x` and `n`
     n^                                take the first `n` terms of...
       recur(                     )        a recursive function
             *tile(x,c(1)),                whose seed is `x` `1`s
                           sum@c,          taking the sum of each window
                                 x         with a window size of `x`
Conor O'Brien
sumber
0

Japt , 18 byte

@ZsVn)x}gK=Vì1;K¯U

Cobalah online!

Penjelasan:

         K=Vì1        :Start with n 1s in an array K
@      }gK            :Extend K to at least x elements by setting each new element to:
      x               : The sum of
 ZsVn                 : The previous n elements
              ;       :Then
               K¯U    :Return the first n elements of K
Kamil Drakari
sumber