Prowadzisz polityczną stronę internetową i ustaliłeś, że ludzie mają lepsze intuicyjne zrozumienie, kiedy szansa na wygraną lub przegraną w wyborach jest wyrażona jako stosunek („5 na 7”) niż gdy jest wyrażona jako odsetek („71%” ).
Ale nie chcesz też wyświetlać mylących wskaźników, takich jak „58 na 82”, chciałbyś, aby były łatwiej zrozumiałe, nawet jeśli nie są tak dokładne.
Tak więc, biorąc pod uwagę procent od 0,1% do 99,9%, zwróć najbliższy „łatwy do zrozumienia” stosunek „ xy y ”, stosując następujące reguły :
- Większość wartości (patrz wyjątki poniżej) powinna zwracać najbliższy stosunek spośród 10 lub niższych . 55% powinno zwrócić „5 na 9”, a nie „11 na 20”.
- Wskaźniki należy obniżyć do najniższych wartości . 65% powinno zwrócić „2 na 3”, a nie „4 na 6”.
- Wartości poniżej 10% powinny zwracać najbliższy stosunek postaci „ 1 in n ”, gdzie n jest jednym z (10,12,15,20,30,40,50,60,70,80,90,100) . Na przykład 6% powinno zwrócić „1 na 15”.
- Wartości powyżej 90% powinny zwracać najbliższy stosunek postaci „ n-1 in n ”, gdzie n jest jednym z (10,12,15,20,30,30,40,50,60,70,80,90,100) . Na przykład 98,7% powinno zwrócić „79 na 80”.
- Wartości poniżej 1% powinny zwracać „ <1 na 100 ”
- Wartości powyżej 99% powinny zwracać „ > 99 na 100 ”
Lub, aby pomyśleć o tym w inny sposób, twój program powinien zwrócić najbliższy stosunek z następujących możliwych wyników (dla wygody podałem ich przybliżone wartości):
<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
Inne postanowienia:
- Wprowadzanie numeryczne może mieścić się w zakresie od 0,1 do 99,9 lub w zakresie od 0,001 do 0,999 , w zależności od tego, który z nich jest wygodniejszy. Musisz obsłużyć co najmniej 3 cyfry znaczące.
- Musisz wyprowadzić współczynnik („3 na 4”), a nie ułamek równoważny („3/4”).
- Jeśli dwa wejścia są jednakowo zbliżone do wejścia, twój program może zwrócić jeden z nich. 7,5% mogłoby zwrócić „1 na 12” lub „1 na 15”.
- Wiodące / końcowe białe znaki i / lub nowe linie są w porządku
Przykłady :
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
To wyzwanie dla golfa , wygrywa najkrótszy kod w każdym języku.
(Podobne do, ale nie duplikowane: Konwertuj liczbę dziesiętną na ułamek , Najbliższy ułamek , Przybliżona liczba zmiennoprzecinkowa z precyzją n-cyfrową )
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"
Czy to oznacza, że my również możemy wrócić7 in 100
? Btw,1 in 14
w tym przypadku jest bliżej wejścia.