Java 8+ , 1044 bytes, berurutan A008008 (Aman)
class c{long[]u={1,4,11,21,35,52,74,102,136,172,212,257,306,354,400,445,488,529,563,587,595,592,584,575,558,530,482,421,354,292,232,164,85,0,-85,-164,-232,-292,-354,-421,-482,-530,-558,-575,-584,-592,-595,-587,-563,-529,-488,-445,-400,-354,-306,-257,-212,-172,-136,-102,-74,-52,-35,-21,-11,-4,-1},v={0,0,0,0,0,0,0,0,0,0,0,0,-1,0,-1,0,-1,0,0,0,0,0,0,0,-1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,-1,0,0,0,0,0,0,0,-1,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,1},w={1,0,0,-1,5};long d=1,e=1;void f(long a,long b){long[]U=u,V=v,W,X;while(a-->0){U=g(U);w=h(v,w);}W=h(v,U);while(b-->0){V=g(V);v=h(v,v);}X=h(V,u);if(w[0]!=v[0]){int i,j,k=0;u=new long[i=(i=W.length)>(j=X.length)?i:j];for(;k<i;k++)u[k]=(k<i?W[k]:0)-(k<j?X[k]:0);d*=e++;}}long[]g(long[]y){int s=y.length,i=1;long[]Y=new long[s-1];for(;i<s;){Y[i-1]=y[i]*i++;}return Y;}long[]h(long[]x,long[]y){int q=x.length,r=y.length,i=0,j;long[]z=new long[q+r-1];for(;i<q;i++)if(x[i]!=0)for(j=0;j<r;)z[i+j]+=x[i]*y[j++];return z;}c(){f(3,0);System.out.println(u[0]/d);}public static void main(String[]args){new c();}}
Cobalah online!
Dapat dipecahkan menggunakan string tersembunyi ukuran 12 . Pasti bisa bermain golf lebih banyak, tetapi tidak mungkin ini benar-benar menang. Saya hanya ingin berkontribusi karena menghormati nomor 8008.
Catatan: sebelum ada yang mengeluh bahwa urutannya adalah hard-coded, saya sudah menguji ini hingga istilah pertama yang menyimpang dari hard-coding (istilah ke-13 = 307) dan ia mendapatkannya dengan benar meskipun lambat. Ini juga mengapa menggunakanlong
alih-alih int
, jika tidak meluap sebelum istilah itu.
Pembaruan (12 Jul 2019) : diperbarui untuk menjadi lebih banyak pemain. Hitung istilah 13 dalam 30 detik di komputer saya sekarang, bukan 5 menit.
Pembaruan (17 Jul 2019) : bug yang diperbaiki untuk loop batas g
fungsi, dan batas panjang array di bagian bawahf
fungsi. Bug ini seharusnya pada akhirnya menyebabkan masalah, tetapi tidak cukup awal untuk tertangkap hanya dengan memeriksa output. Dalam kedua kasus, karena kehadiran bug ini 5 hari ke dalam permainan mungkin telah membingungkan beberapa orang cukup untuk tidak dapat memecahkan teka-teki ini, saya benar-benar baik-baik saja dengan memperpanjang batas waktu "aman" hingga 24 Juli untuk pengiriman ini.
Pembaruan (18 Jul 2019) : Setelah beberapa pengujian saya telah mengkonfirmasi bahwa kelebihan mulai setelah suku ke-4 secara berurutan dan mulai memengaruhi validitas keluaran setelah suku ke-19. Juga dalam program seperti yang tertulis di sini, setiap istilah berturut-turut membutuhkan waktu sekitar 5 kali lebih lama dari sebelumnya untuk menghitung. Istilah ke-15 memakan waktu sekitar 14 menit di komputer saya. Jadi sebenarnya menghitung istilah ke 19 menggunakan program seperti yang ditulis akan memakan waktu lebih dari 6 hari.
Juga, ini adalah kode dengan spasi / indentasi waras sehingga sedikit lebih mudah dibaca jika orang tidak memiliki IDE dengan pemformatan otomatis.
class c {
long[] u = {1, 4, 11, 21, 35, 52, 74, 102, 136, 172, 212, 257, 306, 354, 400, 445, 488, 529, 563, 587, 595, 592, 584,
575, 558, 530, 482, 421, 354, 292, 232, 164, 85, 0, -85, -164, -232, -292, -354, -421, -482, -530, -558, -575,
-584, -592, -595, -587, -563, -529, -488, -445, -400, -354, -306, -257, -212, -172, -136, -102, -74, -52, -35,
-21, -11, -4, -1},
v = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0,
0, 1, 0, 1, 0, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
w = {1, 0, 0, -1, 5};
long d = 1, e = 1;
void f(long a, long b) {
long[] U = u, V = v, W, X;
while (a-- > 0) {
U = g(U);
w = h(v, w);
}
W = h(v, U);
while (b-- > 0) {
V = g(V);
v = h(v, v);
}
X = h(V, u);
if (w[0] != v[0]) {
int i, j, k = 0;
u = new long[i = (i = W.length) > (j = X.length) ? i : j];
for (; k < i; k++)
u[k] = (k < i ? W[k] : 0) - (k < j ? X[k] : 0);
d *= e++;
}
}
long[] g(long[] y) {
int s = y.length, i = 1;
long[] Y = new long[s - 1];
for (; i < s;) {
Y[i - 1] = y[i] * i++;
}
return Y;
}
long[] h(long[] x, long[] y) {
int q = x.length, r = y.length, i = 0, j;
long[] z = new long[q + r - 1];
for (; i < q; i++)
if (x[i] != 0)
for (j = 0; j < r;)
z[i + j] += x[i] * y[j++];
return z;
}
c() {
f(3, 0);
System.out.println(u[0] / d);
}
public static void main(String[] args) {
new c();
}
}
Larutan
f(1,v[0]=1);
tepat sebelum System.out.println
Program ini bekerja dengan menghitung koefisien ekspansi Taylor ke-0 di 0. Di mana fungsi aslinya adalah hasil bagi polinomial, diwakili oleh u
dan v
yang saya dapatkan dari sini , kecuali bahwa dalam dokumen tertaut penyebut tidak dikalikan, dan di mana pun mereka mengatakan bahwa Anda harus menghitung seri Taylor, saya menemukan itu secara tidak sengaja dan kemudian dikonfirmasi melalui sumber lain.
Perhitungan dilakukan melalui aplikasi berulang aturan quotient untuk turunan.
Istilah pertama yang salah v
, seluruh array w
dan beberapa hal lain seperti fungsi yang f
memiliki argumen dilemparkan ke dalam kekacauan dengan orang-orang.