Anda menjalankan situs web politik , dan telah menentukan bahwa orang-orang memiliki pemahaman intuitif yang lebih baik ketika peluang menang atau kalahnya pemilihan dinyatakan sebagai rasio ("5 dalam 7") daripada ketika itu dinyatakan sebagai persentase ("71%" ).
Tetapi Anda juga tidak ingin menampilkan rasio yang membingungkan seperti "58 in 82", Anda ingin agar rasio tersebut lebih mudah dipahami, bahkan jika rasio tersebut tidak terlalu tepat.
Jadi, mengingat persentase antara 0,1% dan 99,9%, kembalikan rasio "mudah dimengerti" terdekat " x in y ", dengan menggunakan aturan berikut :
- Sebagian besar nilai (lihat pengecualian di bawah) harus mengembalikan rasio terdekat dari 10 atau lebih rendah . 55% harus mengembalikan "5 in 9", bukan "11 in 20".
- Rasio harus dikurangi ke tingkat terendah . 65% harus mengembalikan "2 in 3", bukan "4 in 6".
- Nilai di bawah 10% harus mengembalikan rasio terdekat dari bentuk " 1 dalam n " di mana n adalah salah satu dari (10,12,15,20,30,40,50,60,70,80,80,90,100) . Misalnya, 6% harus mengembalikan "1 dalam 15".
- Nilai lebih dari 90% harus mengembalikan rasio terdekat dari bentuk " n-1 in n " di mana n adalah salah satu dari (10,12,15,20,30,40,50,60,70,80,80,90,100) . Misalnya, 98,7% harus mengembalikan "79 in 80".
- Nilai di bawah 1% harus mengembalikan " <1 dalam 100 "
- Nilai lebih dari 99% harus mengembalikan " > 99 dalam 100 "
Atau, kalau dipikir-pikir dengan cara lain, program Anda harus mengembalikan rasio terdekat dari kemungkinan keluaran berikut (saya telah memasukkan nilai perkiraannya untuk kenyamanan Anda):
<1 in 100
1 in 100 = 1.00%
1 in 90 = 1.11%
1 in 80 = 1.25%
1 in 70 = 1.43%
1 in 60 = 1.67%
1 in 50 = 2.00%
1 in 40 = 2.50%
1 in 30 = 3.33%
1 in 20 = 5.00%
1 in 15 = 6.67%
1 in 12 = 8.33%
1 in 10 = 10.00%
1 in 9 = 11.11%
1 in 8 = 12.50%
1 in 7 = 14.29%
1 in 6 = 16.67%
1 in 5 = 20.00%
2 in 9 = 22.22%
1 in 4 = 25.00%
2 in 7 = 28.57%
3 in 10 = 30.00%
1 in 3 = 33.33%
3 in 8 = 37.50%
2 in 5 = 40.00%
3 in 7 = 42.86%
4 in 9 = 44.44%
1 in 2 = 50.00%
5 in 9 = 55.56%
4 in 7 = 57.14%
3 in 5 = 60.00%
5 in 8 = 62.50%
2 in 3 = 66.67%
7 in 10 = 70.00%
5 in 7 = 71.43%
3 in 4 = 75.00%
7 in 9 = 77.78%
4 in 5 = 80.00%
5 in 6 = 83.33%
6 in 7 = 85.71%
7 in 8 = 87.50%
8 in 9 = 88.89%
9 in 10 = 90.00%
11 in 12 = 91.67%
14 in 15 = 93.33%
19 in 20 = 95.00%
29 in 30 = 96.67%
39 in 40 = 97.50%
49 in 50 = 98.00%
59 in 60 = 98.33%
69 in 70 = 98.57%
79 in 80 = 98.75%
89 in 90 = 98.89%
99 in 100 = 99.00%
>99 in 100
Ketentuan lainnya:
- Input numerik dapat berada dalam kisaran 0,1 hingga 99,9 atau dalam kisaran 0,001 hingga 0,999 , mana yang lebih nyaman. Anda harus menangani setidaknya 3 digit signifikan.
- Anda harus menghasilkan rasio ("3 in 4"), bukan fraksi yang setara ("3/4").
- Jika ada dua rasio yang sama dekat dengan input, program Anda dapat mengembalikan keduanya. 7,5% dapat mengembalikan "1 dalam 12" atau "1 dalam 15".
- Ruang putih terkemuka / tertinggal dan / atau garis baru baik-baik saja
Contoh :
Input : Output
0.5 : <1 in 100
1.0 : 1 in 100
1.5 : 1 in 70
7.5 : 1 in 15 or 1 in 12 (either is acceptable)
9.2 : 1 in 10
13.1 : 1 in 8
29.2 : 2 in 7
29.3 : 3 in 10
52.7 : 1 in 2
52.8 : 5 in 9
72.0 : 5 in 7
73.9 : 3 in 4
88.8 : 8 in 9
90.8 : 9 in 10
94.2 : 19 in 20
98.7 : 79 in 80
98.9 : 89 in 90
99.0 : 99 in 100
99.1 : >99 in 100
Ini adalah tantangan kode-golf , kode terpendek dalam setiap bahasa menang.
(Mirip dengan, tetapi bukan duplikat dari: Konversi desimal menjadi pecahan , pecahan terdekat , Perkiraan angka floating point dengan presisi n-digit )
sumber
If there are two ratios equally close to the input, your program can return either one. 7.5% could return "1 in 12" or "1 in 15"
Apakah itu berarti kita dapat kembali7 in 100
juga? Btw,1 in 14
lebih dekat dengan input dalam hal ini.Jawaban:
T-SQL, 385 byte
Input adalah melalui tabel t yang sudah ada sebelumnya dengan bidang numerik i , sesuai standar IO kami .
Tabel input tersebut digabungkan dengan tabel dalam-memori yang diuraikan dari sebuah string via
STRING_SPLIT
(yang memisahkan baris) danPARSENAME
(yang memisahkan pembilang dan penyebut via.
).Tabel diurutkan berdasarkan jarak dari nilai input i , dan mengembalikan baris atas, diformat dengan tepat.
sumber
Arang , 84 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Mengambil input sebagai desimal daripada persentase. Penjelasan:
Masukkan fraksi.
Hitung nilai desimal semua rasio dan ambil perbedaan absolut dengan input asli.
<
>
Bergabunglah dengan pembilang dan penyebut rasio yang sesuai dengan
in
dan cetak.sumber
JavaScript (ES7),
164159144 byteCobalah online!
Bagaimana?
Berkomentar
sumber
Jelly , 58 byte
Cobalah online!
-16 bytes berkat Arnauld (hanya bisa menambahkan
<
dan>
alih-alih menulis ulang seluruh frasa)-6 byte dan perbaikan bug berkat Jonathan Allan
sumber
0.3
harus menghasilkan3 in 10
tidak2 in 7
µµ
, bukan? EDIT - dan kemudian golfÐṂṂ
keÞḢ
9
ke⁵
harus menyelesaikan bug yang saya percaya.Python 2 ,
261278261237177 byteCobalah online!
sumber
'\n '
dengan';'
... kecuali saya salah.Bersih ,
224198197 byteCobalah online!
Dijelaskan:
sumber
Jelly ,
5352 byteProgram lengkap yang mencetak hasilnya.
Cobalah online!
Atau lihat test-suite
Perhatikan bahwa test-suite diubah untuk membuat kode tautan monadik dengan:
³
untuk®
; dan“ in
ke“ in ”
Bagaimana?
Mulai dengan kode yang memaksa pencetakan
<
atau>
tanda yang diperlukan dan kemudian kode yang membangun semua pasangan pembilang-penyebut (dengan beberapa versi formulir yang tidak disederhanakan, semua setelah formulir yang disederhanakan) dan mencetak entri yang dievaluasi divisi yang berbeda secara berbeda menggunakan stabil. semacam bergabung denganin
.sumber
Perl 6 , 118 byte
Cobalah online!
sumber