Gestisci un sito Web politico e hai stabilito che le persone hanno una migliore comprensione intuitiva quando la possibilità di vincere o perdere un'elezione è espressa come un rapporto ("5 in 7") rispetto a quando è espressa in percentuale ("71%" ).
Ma anche tu non vuoi mostrare rapporti confusi come "58 in 82", ti piacerebbe che fossero compresi più facilmente, anche se non sono così precisi.
Quindi, data una percentuale compresa tra lo 0,1% e il 99,9%, restituisce il rapporto "facile da capire" più vicino " x in y ", usando le seguenti regole :
- La maggior parte dei valori (vedere le eccezioni di seguito) dovrebbe restituire il rapporto più vicino tra 10 o inferiore . Il 55% dovrebbe restituire "5 in 9", non "11 in 20".
- I rapporti dovrebbero essere ridotti ai termini più bassi . Il 65% dovrebbe restituire "2 in 3", non "4 in 6".
- I valori inferiori al 10% dovrebbero restituire il rapporto più vicino della forma " 1 in n " dove n è uno di (10,12,15,20,30,40,50,60,70,80,90,100) . Ad esempio, il 6% dovrebbe restituire "1 su 15".
- I valori superiori al 90% dovrebbero restituire il rapporto più vicino della forma " n-1 in n " dove n è uno di (10,12,15,20,30,40,50,60,70,80,90,100) . Ad esempio, il 98,7% dovrebbe restituire "79 in 80".
- I valori inferiori all'1% dovrebbero restituire " <1 su 100 "
- I valori superiori al 99% dovrebbero restituire " > 99 su 100 "
Oppure, per pensarci in un altro modo, il tuo programma dovrebbe restituire il rapporto più vicino dai seguenti output possibili (ho incluso i loro valori approssimativi per comodità):
<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
Altre clausole:
- L'input numerico può essere compreso tra 0,1 e 99,9 o tra 0,001 e 0,999 , a seconda di quale sia più conveniente. È necessario gestire almeno 3 cifre significative.
- È necessario generare un rapporto ("3 in 4"), non la frazione equivalente ("3/4").
- Se ci sono due rapporti ugualmente vicini all'ingresso, il programma può restituire uno dei due. Il 7,5% potrebbe restituire "1 su 12" o "1 su 15".
- Lo spazio bianco iniziale / finale e / o le nuove linee vanno bene
Esempi :
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
Questa è una sfida di code-golf , vince il codice più corto in ogni lingua.
(Simile a, ma non duplicato di: Converti un decimale in una frazione , Frazione più vicina , Numero in virgola mobile approssimativo con precisione a n cifre )
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"
Significa che anche noi possiamo tornare7 in 100
? A proposito,1 in 14
in questo caso è più vicino all'ingresso.