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ą )
źródło
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.Odpowiedzi:
T-SQL, 385 bajtów
Dane wejściowe pochodzą z wcześniej istniejącej tabeli tz polem numerycznym i , zgodnie z naszymi standardami IO .
Ta tabela wejściowa jest połączona z tabelą w pamięci przeanalizowaną z ciągu znaków przez
STRING_SPLIT
(który oddziela wiersze) iPARSENAME
(który oddziela licznik i mianownik przez.
).Tabela jest sortowana według odległości od wartości wejściowej i i zwraca odpowiednio sformatowany górny wiersz.
źródło
Węgiel drzewny , 84 bajty
Wypróbuj online! Link jest do pełnej wersji kodu. Pobiera dane wejściowe jako liczbę dziesiętną, a nie procentową. Wyjaśnienie:
Podaj ułamek.
Oblicz wartości dziesiętne wszystkich współczynników i weź bezwzględną różnicę przy pierwotnym wprowadzeniu.
<
>
Połącz licznik i mianownik odpowiedniego stosunku za pomocą
in
i wydrukuj.źródło
JavaScript (ES7),
164159144 bajtówWypróbuj online!
W jaki sposób?
Skomentował
źródło
Galaretka , 58 bajtów
Wypróbuj online!
-16 bajtów dzięki Arnauldowi (może po prostu wstawić
<
i>
zamiast przepisywać całą frazę)-6 bajtów i poprawki błędów dzięki Jonathanowi Allanowi
źródło
0.3
powinno skutkować3 in 10
nie2 in 7
µµ
, nie? EDIT - a następnie golfÐṂṂ
doÞḢ
9
na⁵
powinna rozwiązać problem, który moim zdaniem.Python 2 ,
261278261237177 bajtówWypróbuj online!
źródło
'\n '
z';'
... chyba że się mylę.Czysty ,
224198197 bajtówWypróbuj online!
Wyjaśniono:
źródło
Galaretka ,
5352 bajtyPełny program, który drukuje wynik.
Wypróbuj online!
Lub zobacz pakiet testowy
Zauważ, że pakiet testowy został zmieniony, aby uczynić kod monadycznym łączem poprzez:
³
do®
; i“ in
do“ in ”
W jaki sposób?
Zaczyna się od kodu, który wymusza wszelkie niezbędne drukowanie znaku
<
lub,>
a następnie kodu, który konstruuje wszystkie pary licznik-mianownik (z pewnymi nadmiarowymi, nieskomplikowanymi wersjami formularza, wszystkie po ich uproszczonej formie) i drukuje minimalnie różny wpis z oceną podziału za pomocą stabilnego sort połączony zin
.źródło
Perl 6 , 118 bajtów
Wypróbuj online!
źródło