Jika kita menulis urutan angka sebagai koefisien dari seri daya, maka seri daya itu disebut fungsi penghasil (atau Gf) dari urutan tersebut. Artinya, jika untuk beberapa fungsi F(x)
dan serangkaian bilangan bulat yang a(n)
kita miliki:
a(0) + a(1)x + a(2)x^2 + a(3)x^3 + a(4)x^4 + ... = F(x)
Kemudian F(x)
adalah fungsi menghasilkan a
. Misalnya, deret geometri memberi tahu kita bahwa:
1 + x + x^2 + x^3 + x^4 + ... = 1/(1-x)
Jadi fungsi pembangkitnya 1, 1, 1, ...
adalah 1/(1-x)
. Jika kita membedakan kedua sisi persamaan di atas dan mengalikannya dengan x
kita mendapatkan persamaan berikut:
x + 2x^2 + 3x^3 + 4x^4 + ... = x/(1-x)^2
Jadi fungsi pembangkitnya 1, 2, 3, ...
adalah x/(1-x)^2
. Menghasilkan fungsi adalah alat yang sangat kuat, dan Anda dapat melakukan banyak hal berguna dengannya. Pengantar singkat dapat ditemukan di sini , tetapi untuk penjelasan yang sangat menyeluruh ada fungsi buku yang menakjubkan.
Dalam tantangan ini, Anda akan mengambil fungsi rasional (hasil bagi dari dua polinomial dengan koefisien integer) sebagai input sebagai dua array koefisien integer, pertama pembilang kemudian penyebut. Misalnya fungsi f(x) = x / (1 - x - x^2)
akan dikodekan seperti [0, 1], [1, -1, -1]
pada input.
Dengan masukan ini, program Anda harus mencetak koefisien seri daya tanpa batas yang sama dengan fungsi pembangkit, satu per baris, mulai dari koefisien x
, kemudian x^2
, dll.
Contoh:
[1], [1, -1] -> 1, 1, 1, 1, 1, 1, 1, ...
[1], [2, -2] -> 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, ...
[0, 1], [1, -2, 1] -> 1, 2, 3, 4, 5, 6, 7, 8, ...
[0, 1], [1, -1, -1] -> 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
[1], [1, -2] -> 1, 2, 4, 8, 16, 32, 64, 128, ...
[0, 1, 1], [1, -3, 3, -1] -> 1, 4, 9, 16, 25, 36, ...
sumber
Jawaban:
Haskell , 63 byte
Cobalah online!
Menentukan operator yang
%
mengembalikan daftar koefisien malas yang tak terbatas. Daftar ini diindeks nol, sehingga koefisien konstan disertakan.sumber
Mathematica, 64
8390byteTerima kasih kepada @ngenisis dan @Jenny_mathy!
Ambil input sebagai dua daftar.
Perlu
Alt+.
mengakhiri eksekusi untuk melihat hasilnya. Frontend mungkin macet karena output yang cepat.Versi 83 byte (@Jenny_mathy):
sumber
64
bytes:Do[Echo@Limit[D[#/#2/i!&@@Fold[x#+#2&]/@#,{x,i}],x->0],{i,∞}]&
. Ini mengasumsikan input adalah daftar dua daftar dan koefisien berada dalam urutan derajat menurun. Satu-satunya built-in saya tahu untuk melakukan apa yangv
dilakukan adalahInternal`FromCoefficientList
i
dalam lambda. (Di sisi lain, saya tidak begitu yakin apakah kemampuan untuk menjalankan berulang kali relevan ketika tujuannya adalah untuk mencetak daftar tanpa batas ... apakah ada konsensus meta mengenai hal ini?)Iterator {i,∞} does not have appropriate bounds
.CJam (22 byte)
Demo online . Perhatikan bahwa karena banyak jawaban yang ada, ini termasuk koefisien 0 dalam output.
Pembedahan
sumber
Mathematica,
8679 byteMengambil input sebagai dua daftar terpisah (koefisien pembilang, koefisien penyebut). Jika input dapat diambil secara langsung sebagai fraksi dari polinomial daripada sebagai daftar koefisien, ini dapat dipersingkat secara signifikan.
Tampaknya
Do
bisa bekerja dengan batas tak terbatas di v11. Saya tidak dapat menguji ini secara lokal, tetapi, jika ini masalahnya, maka solusi ini dapat dipersingkat menjadi 75 byte :sumber
n
dari 1 sebagai pengganti0
, ini memberikan hasil yang sama dengan solusi Anda; keduanya gagal, pada kasus uji kedua hingga terakhir, yang dilewati solusi ini mulain
dari 0.Pyth , 23 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Pari / GP , 66 byte
Cobalah online!
sumber