Sie betreiben eine politische Website und haben festgestellt, dass die Menschen ein besseres intuitives Verständnis haben, wenn die Chance, eine Wahl zu gewinnen oder zu verlieren, als Verhältnis ("5 zu 7") ausgedrückt wird, als wenn es als Prozentsatz ausgedrückt wird ("71%"). ).
Aber Sie möchten auch keine verwirrenden Verhältnisse wie "58 in 82" anzeigen, sondern möchten, dass diese leichter verstanden werden, auch wenn sie nicht ganz so präzise sind.
Geben Sie also bei einem Prozentsatz zwischen 0,1% und 99,9% das nächstgelegene "leicht verständliche" Verhältnis " x in y " zurück, indem Sie die folgenden Regeln anwenden :
- Die meisten Werte (siehe Ausnahmen unten) sollten den Wert zurückgeben nächstliegende Verhältnis von 10 oder weniger zurückgeben . 55% sollten "5 in 9" zurückgeben, nicht "11 in 20".
- Verhältnisse sollten sein ihren niedrigsten Ausdrücken verringert werden . 65% sollten "2 in 3" zurückgeben, nicht "4 in 6".
- Werte unter 10% sollten das engste Verhältnis der Form " 1 in n " mit n ergeben eines von (10,12,15,20,30,40,50,60,70,80,90,100) ist . Beispielsweise sollten 6% "1 in 15" zurückgeben.
- Werte über 90% sollten das engste Verhältnis der Form " n-1 in n " zurückgeben, wobei n eins von (10,12,15,20,30,40,50,60,70,80,90,100) ist . Beispielsweise sollten 98,7% "79 in 80" zurückgeben.
- Werte unter 1% sollten " <1 in 100 " zurückgeben
- Werte über 99% sollten " > 99 in 100 " zurückgeben
Oder, um es anders zu betrachten, Ihr Programm sollte das nächstliegende Verhältnis aus den folgenden möglichen Ausgaben zurückgeben (ich habe die ungefähren Werte für Ihre Bequemlichkeit angegeben):
<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
Andere Bestimmungen:
- Die numerische Eingabe kann im Bereich von 0,1 bis 99,9 oder im Bereich von liegen 0,001 bis 0,999 liegen , je nachdem, was bequemer ist. Sie müssen mindestens 3 signifikante Stellen behandeln.
- Sie müssen ein Verhältnis ("3 in 4") ausgeben , nicht den entsprechenden Bruch ("3/4").
- Wenn sich zwei Verhältnisse in der Nähe der Eingabe befinden, kann Ihr Programm eines davon zurückgeben. 7,5% könnten "1 in 12" oder "1 in 15" zurückgeben.
- Führende / nachfolgende Leerzeichen und / oder neue Zeilen sind in Ordnung
Beispiele :
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
Dies ist eine Code-Golf- Herausforderung, der kürzeste Code in jeder Sprache gewinnt.
(Ähnlich, aber nicht dupliziert von: Konvertieren einer Dezimalzahl in einen Bruch , Nächstliegender Bruch , Ungefähre Gleitkommazahl mit n-stelliger Genauigkeit )
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"
Bedeutet das, dass wir auch zurückkehren können7 in 100
? Übrigens1 in 14
ist in diesem Fall näher an der Eingabe.