Diberikan 5 titik berbeda pada bidang dua dimensi, tentukan jenis penampang kerucut yang dibentuk oleh titik tersebut. Output akan menjadi satu dari circle
, hyperbola
, ellipse
, atau parabola
.
Aturan
- Titik-titik akan berada pada posisi linear umum, yang berarti bahwa tidak ada tiga titik yang collinear, dan dengan demikian kerucut yang melewatinya akan menjadi unik.
- Koordinat dari 5 poin akan berupa angka desimal antara -10 dan 10, inklusif.
- Ketepatan untuk nilai desimal / float haruslah ketepatan jenis float / desimal asli bahasa Anda. Jika bahasa / tipe data Anda memiliki ketelitian yang arbitrer, Anda dapat menggunakan 12 digit setelah titik desimal sebagai ketelitian maksimum yang diperlukan, membulatkan ke nol (misalnya
1.0000000000005 == 1.000000000000
). - Kapitalisasi output tidak menjadi masalah.
- Mengeluarkan
ellipse
ketika bagian kerucut sebenarnya lingkaran tidak diizinkan. Semua lingkaran adalah elips, tetapi Anda harus menampilkan yang paling spesifik.
Pada ketidakakuratan dan presisi floating point:
Saya mencoba membuat ini sesederhana mungkin, sehingga masalah dengan ketidakakuratan floating point tidak menghalangi. Tujuannya adalah, jika tipe data adalah "nilai presisi magis tak terbatas" alih-alih float / double, maka semuanya akan bekerja dengan sempurna. Tetapi, karena "nilai ketelitian tak terbatas magis" tidak ada, Anda menulis kode yang mengasumsikan bahwa nilai Anda adalah ketepatan tak terbatas, dan setiap masalah yang muncul sebagai akibat ketidakakuratan titik mengambang adalah fitur, bukan bug.
Uji Kasus
(0, 0), (1, 5), (2, 3), (4, 8), (9, 2) => hyperbola
(1.2, 5.3), (4.1, 5.6), (9.1, 2.5), (0, 1), (4.2, 0) => ellipse
(5, 0), (4, 3), (3, 4), (0, 5), (0, -5) => circle
(1, 0), (0, 1), (2, 1), (3, 4), (4, 9) => parabola
circle
tampaknya membutuhkan pemeriksaan kesetaraan pelampung untuk membedakan dari elips yang sangat bulat. Apa presisi yang harus kita asumsikan di sini?