Tulis fungsi x(a)
, y(a)
dan z(a)
sedemikian rupa sehingga untuk setiap rasional a
semua fungsi mengembalikan angka rasional dan x(a)*y(a)*z(a)*(x(a) + y(a) + z(a)) == a
. Anda dapat mengasumsikan ≥ 0.
Anda tidak perlu menggunakan tipe rasional atau operasi dalam program Anda, selama program Anda secara matematis sehat. Misalnya, jika Anda menggunakan akar kuadrat dalam jawaban Anda, Anda harus menunjukkan bahwa argumennya selalu kuadrat dari bilangan rasional.
Anda dapat menulis tiga fungsi bernama x, y, z atau menulis tiga program sebagai gantinya jika fungsi tidak praktis atau tidak ada untuk bahasa Anda. Atau Anda juga dapat menulis satu program / fungsi yang mengembalikan tiga angka x, y, z. Akhirnya, jika Anda menginginkannya, Anda dapat memasukkan / mengeluarkan bilangan rasional sebagai pasangan pembilang / penyebut. Skor Anda adalah ukuran total dari tiga fungsi atau tiga program dalam byte. Kemenangan skor terkecil.
Pemaksaan kasar tidak diizinkan. Untuk setiap a = p / q di mana p, q ≤ 1000 program Anda harus berjalan dalam waktu kurang dari 10 detik.
Contoh (ini tidak berarti dekomposisi Anda harus memberikan angka-angka ini):
x = 9408/43615
y = 12675/37576
z = 1342/390
x*y*z*(x+y+z) = 1
a
?Jawaban:
CJam (59 byte)
Ini adalah blok anonim (fungsi) yang mengambil bilangan bulat atau ganda pada tumpukan dan menghasilkan array dengan tiga ganda. Ini memiliki dua kasus internal untuk menangani semua input non-negatif, karena dengan hanya satu kasus itu akan pecah pada salah satu
0.25
atau4
. Masih rusak untuk input-12
dan-1.3333333333333333
, tetapi spek memungkinkan ...The demo online mengeksekusinya dan kemudian menambahkan sampai nilai-nilai, mencetak keempat, dan mengalikan mereka untuk menunjukkan bahwa itu mendapat nilai asli (modulo kesalahan pembulatan).
Latar belakang matematika
Mengikuti Noam Elkies kami mendefinisikan bantu . Kemudian dan atau . Ini memiliki banyak simetri; solusi apa pun akan memiliki empat formula dan kita bisa memilih tiga yang paling golf.w = - x - y- z x + y+ z+ w = 0 - x yzw = a x yzw + a = 0
Rusa memberikan empat keluarga set solusi. Euler:
Satu terkait dengan Euler:
Yang lebih sederhana:
Dan satu yang terkait dengan yang itu:
Perhatikan bahwa setiap keluarga memiliki setidaknya dua penyebut dari bentuk untuk dan positif : karena semua istilah yang terlibat adalah rasional, itu berarti ada beberapa positif dengannya kita mendapatkan pembagian dengan nol. Karena itu kita harus menggunakan setidaknya dua set solusi yang memiliki singularitas pada nilai yang berbeda dari . Secara intuitif akan menjadi golfiest untuk memilih dua set dari keluarga yang sama. Saya telah memilih keluarga paling sederhana (yang ketiga) dengan parameter dan .p q a a s = 1 s = 2p s4- qSebuah p q a a s=1 s=2
sumber
Aksioma, 191 byte
Ini adalah traslation dari formula yang dilaporkan Peter Taylor di halaman ini dengan beberapa kode akan membuat penyebutnya menjadi 0. satu tes
sumber