Tugas Anda adalah, diberikan x
, keluaran 2*x
. Mudah kan !? Tapi ada tangkapan: x
akan diberikan sebagai fraksi lanjutan (mungkin tak terbatas) , dan output harus fraksi lanjutan. Input dijamin menjadi bilangan aljabar nyata yang tingkatannya paling banyak 2.
Input : Fraksi lanjutan dari x
. Ini dibagi menjadi 3 bagian: bagian integer, awalan, dan bagian berulang. Bagian integer terdiri dari satu integer. Awalan dan bagian berulang adalah (mungkin kosong) array bilangan bulat positif yang menggambarkan awalan dan bagian berulang dari fraksi lanjutan. Misalnya, input (3, [1], [2, 4])
mewakili fraksi lanjutan [3; 1, 2, 4, 2, 4, ...]
.
Jika bagian berulang kosong, itu menunjukkan angka rasional. Misalnya, (3, [1, 2], [])
mewakili [3; 1, 2] = 11/3
. Anda harus menerima kedua bentuk bilangan rasional (yaitu (3, [1, 1, 1], [])
, yang [3; 1, 1, 1] = 11/3
juga harus menjadi input yang valid).
Keluaran : Keluarkan fraksi lanjutan dari dua kali input, dalam format yang sama dengan input. Jika outputnya rasional, Anda dapat menampilkan salah satu bentuk fraksi lanjutan. Selama jawabannya setara dengan jawaban yang benar, itu baik-baik saja; tidak ada "kompresi" yang diperlukan, sehingga bagian yang tak terbatas mungkin "sedikit terbuka" (misalnya [1; 4, 2, 3, 2, 3...]
dapat ditulis (1, [4], [2, 3])
atau (1, [4, 2, 3], [2, 3])
). Semua jawaban harus tepat.
Kasus uji : Kolom formulir yang tepat diberikan untuk kenyamanan.
Input Exact Form Output
(0, [] []) 0 (0, [] []) or (-1, [1], [])
(-5, [1, 1], []) -4.5 (-9, [], []) or (-10, [1], [])
(3, [1, 2], []) 11/3 (7, [3], []) or (7, [2, 1], [])
(1, [], [2]) sqrt(2) (2, [], [1, 4])
(-1, [2], [2, 1]) -1/sqrt(3) (-2, [1, 5], [2, 6])
Dan akhirnya kasus uji yang sedikit lebih besar untuk memastikan presisi: (0, [1], [6, 1, 3, 1, 42, 1, 3, 1, 6, 2]) --> (1, [], [1, 2, 1, 8, 1, 20, 1, 8, 1, 2, 1, 2])
.
Kode terpendek menang!
Petunjuk : Anda dapat melakukan aritmatika dengan cara yang langsung pada fraksi lanjutan seperti dijelaskan di sini . Menggandakan fraksi lanjutan hanya merupakan kasus khusus dari algoritma ini (meskipun bagian yang sulit adalah menemukan ketika fraksi lanjutan berulang).
sumber
Sqrt[2]
.[3; 1, 1, 1]
akan berada(3, [1, 1, 1], [])
dalam format input yang kami gunakan - jadi pertanyaannya mungkin harus menyebutkannya dalam format itu (dalam paragraf ketiga), hanya untuk memastikan kejelasan.(-2, [1, 5, 2], [6, 2])
menjadi input yang dapat diterima(-1, [2], [2, 1])
? Bagaimana dengan(-2, [1, 5, 2, 6, 2, 6], [2, 6])
?Jawaban:
Bahasa Wolfram (Mathematica) , 44 byte
Cobalah online!
Mathematica memiliki builtin! Yay! Builtin Mathematica sangat panjang. Aww.
Fraksi lanjutan Mathematica terlihat seperti
{integer, ...prefix, {...repeating}}
-1 terima kasih kepada JungHwan Min
sumber
*
pembatas karena Mathematica, jika tidak ada, adalahTimes
.JavaScript (ES6), 267 byte
Menerima 3 argumen (n = bagian integer, f = awalan, r = bagian berulang). Output tiga bagian dalam sebuah array. Cobalah online!
Penjelasan
Ini adalah implementasi yang cukup langsung dari algoritma untuk menghitung fraksi aritmatika lanjutan yang terkait dengan tantangan di sini . Istilah berulang ditangani dengan menyimpan matriks perantara dalam tabel pencarian, menunggu duplikat, dan mengeluarkan persyaratan sampai tampilan duplikat berikutnya. Ini tidak valid dan hampir menggandakan byte yang diperlukan untuk menangani pecahan yang berkelanjutan, tapi saya tidak bisa memikirkan alternatif yang lebih baik.
Istilah terkemuka dihitung secara terpisah untuk memastikan bahwa pecahan lanjutan negatif mempertahankan nilai positif untuk semua syarat kecuali yang pertama.
Untuk mencegah positif palsu ketika menunggu siklus berulang, toko tabel data sebagai berikut:
<index of input repeating part><delimiter><matrix values>
.Perhatikan bahwa versi golf digunakan
eval
untuk menghemat 1 byte.sumber