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 )
quelle
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.Antworten:
T-SQL, 385 Bytes
Die Eingabe erfolgt über bereits vorhandene Tabelle t mit numerischem Feld i , je unseren IO - Standards .
Diese Eingabetabelle wird mit einer In-Memory-Tabelle verknüpft, die aus einem String-Via
STRING_SPLIT
(das Zeilen trennt) undPARSENAME
(das Zähler und Nenner über trennt) analysiert wird.
.Die Tabelle ist nach dem Abstand vom Eingabewert i sortiert und gibt die oberste Zeile zurück, die entsprechend formatiert ist.
quelle
Kohle , 84 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Nimmt die Eingabe als Dezimalzahl und nicht als Prozentsatz. Erläuterung:
Geben Sie den Bruch ein.
Berechnen Sie die Dezimalwerte aller Verhältnisse und nehmen Sie die absolute Differenz zur ursprünglichen Eingabe.
<
>
Verbinden Sie den Zähler und Nenner des entsprechenden Verhältnisses mit
in
und drucken Sie.quelle
JavaScript (ES7),
164159144 ByteProbieren Sie es online!
Wie?
Kommentiert
quelle
Jelly , 58 Bytes
Probieren Sie es online!
-16 Bytes dank Arnauld (kann einfach die ganze Phrase voranstellen
<
und>
anstatt sie neu zu schreiben)-6 Bytes und Bugfixes dank Jonathan Allan
quelle
0.3
sollte3 in 10
nicht führen2 in 7
µµ
, nein? EDIT - und dann GolfÐṂṂ
aufÞḢ
9
auf⁵
sollte den Fehler beheben, glaube ich.Python 2 ,
261278261237177 BytesProbieren Sie es online!
quelle
'\n '
mit';'
... es sei denn , ich bin falsch.Sauber ,
224198197 BytesProbieren Sie es online!
Erklärt:
quelle
Jelly ,
5352 BytesEin vollständiges Programm, das das Ergebnis druckt.
Probieren Sie es online!
Oder schauen Sie sich die Testsuite an
Beachten Sie, dass die Testsuite geändert wird, um den Code zu einer monadischen Verknüpfung zu machen, indem:
³
zu®
; und“ in
bis“ in ”
Wie?
Beginnt mit Code, der das erforderliche Drucken des Zeichens
<
oder erzwingt>
, und dann mit Code, der alle Zähler-Nenner-Paare (mit einigen redundanten, nicht vereinfachten Formularversionen, alle nach ihrer vereinfachten Form) erstellt und den minimal unterschiedlichen, durch Division ausgewerteten Eintrag unter Verwendung eines Stables druckt verbunden mitin
.quelle
Perl 6 , 118 Bytes
Probieren Sie es online!
quelle