Tujuan Anda adalah menulis beberapa kode yang akan menghasilkan urutan desimal unik terpendek untuk fraksi input. Tidak ada dua pecahan dengan penyebut yang sama dapat memiliki output yang sama, meskipun mungkin pecahan dengan penyebut yang berbeda memiliki representasi yang sama.
Ambil 2 bilangan bulat sebagai input, yang pertama adalah pembilang, yang kedua adalah penyebut.
Misalnya:
n d output
----- ------
0 13: 0.00
1 13: 0.07
2 13: 0.1
3 13: 0.2
4 13: 0.30
5 13: 0.38
dll.
3/13
adalah satu-satunya fraksi dengan penyebut 13 yang dimulai dengan 0.2
, jadi tidak diperlukan digit lebih lanjut. 4/13
dan 5/13
keduanya dimulai dengan 0.3
, jadi digit lain diperlukan untuk membedakannya.
Anda dapat menampilkan angka lebih besar dari -1 dan kurang dari 1 baik dengan atau tanpa nol sebelum titik desimal, selama output konsisten, yaitu 0.5
dan .5
adalah angka yang sama dan keduanya valid. Tidak ada nol terkemuka lainnya yang diizinkan. Nol trailing harus ditunjukkan jika mereka perlu untuk membedakan output dari nilai lain.
Anda tidak boleh membulatkan angka apa pun dari nol; mereka harus dipotong. Tidak boleh ada ruang depan atau belakang. Secara opsional mungkin ada satu baris tambahan.
Nilai tes lainnya:
n d output
---------- ------
0 1: 0 (this 0 may not be removed because there's no decimal point)
5 1: 5
0 3: 0.0 (or .0)
4 3: 1.3
5 3: 1.6
10 8: 1.2
11 8: 1.3
12 8: 1.5
-496 -38: 13.05
458 -73: -6.27
70 106: 0.660 (or .660)
255 123: 2.07
256 -123: -2.081
-257 -123: 2.089
-258 123: -2.09
258 -152: -1.697
-259 152: -1.70
260 152: 1.710
272 195: 1.39
380 247: 1.538
455 -455: -1.000
-44 891: -0.049 (or -.049)
123 1234: 0.099 (or .099)
Dalam setiap kasus, output dan penyebutnya cukup untuk bekerja secara unik pembilangnya.
sumber
/b
dani
untukp
sehingga Anda mungkin juga kode mereka di dalamp
dirinya sendiri dan hanya mengambil satu parameter. Juga jawabannya hanyan
supaya Anda tidak perlu menghitungnya lagi. Saya memiliki versi ES6 rekursif secara longgar berdasarkan ini pada hanya 86 byte ...