Вы управляете политическим веб-сайтом и определили, что люди лучше понимают, когда шанс выиграть или проиграть на выборах выражается в виде соотношения («5 в 7»), чем в процентах («71%»). ).
Но вы также не хотите отображать непонятные соотношения, такие как «58 в 82», вы хотели бы, чтобы их было легче понять, даже если они не столь точны.
Таким образом, при заданном процентном соотношении от 0,1% до 99,9% верните ближайшее «простое для понимания» соотношение « x в y », используя следующие правила :
- Большинство значений (см. Исключения ниже) должны возвращать ближайшее соотношение из 10 или ниже . 55% должны вернуть «5 в 9», а не «11 в 20».
- Соотношения должны быть снижены до минимальных . 65% должны возвращать «2 в 3», а не «4 в 6».
- Значения ниже 10% должны возвращать наиболее близкое соотношение в форме « 1 в n », где n равно одному из (10,12,15,20,30,40,50,60,70,80,90,100) . Например, 6% должны возвращать «1 в 15».
- Значения свыше 90% должны возвращать наиболее близкое отношение формы « n-1 в n », где n равно одному из (10,12,15,20,30,40,50,60,70,80,90,100) . Например, 98,7% должны вернуть «79 в 80».
- Значения ниже 1% должны возвращать « <1 в 100 »
- Значения свыше 99% должны возвращать « > 99 в 100 »
Или, если подумать об этом, ваша программа должна возвращать ближайшее соотношение из следующих возможных выходных данных (для вашего удобства я включил их приблизительные значения):
<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
Другие условия:
- Числовой ввод может быть в диапазоне от 0,1 до 99,9 или в диапазоне от 0,001 до 0,999 , в зависимости от того, что более удобно. Вы должны обрабатывать как минимум 3 значащие цифры.
- Вы должны вывести соотношение («3 в 4»), а не эквивалентную дробь («3/4»).
- Если есть два отношения, одинаково близкие к входному значению, ваша программа может вернуть любое из них. 7,5% могут вернуть «1 в 12» или «1 в 15».
- Лидирующие / завершающие пробелы и / или новые строки в порядке
Примеры :
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
Это испытание для игры в гольф , выигрывает самый короткий код на каждом языке.
(Аналогично, но не дублирует: преобразование десятичной дроби в дробную , ближайшую дробную дробь , приблизительное число с плавающей запятой с точностью до n цифр )
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"
Значит ли это, что мы тоже можем вернуться7 in 100
? Кстати,1 in 14
ближе к входу в этом случае.Ответы:
T-SQL, 385 байт
Ввод осуществляется с уже существующей таблицы т с числовым полем ввода , в соответствии с нашими стандартами IO .
Эта входная таблица объединяется с таблицей в памяти, анализируемой из строки через
STRING_SPLIT
(которая разделяет строки) иPARSENAME
(которая разделяет числитель и знаменатель через.
).Таблица сортируется по расстоянию от входного значения i и возвращает верхнюю строку, отформатированную соответствующим образом.
источник
Древесный уголь , 84 байта
Попробуйте онлайн! Ссылка на подробную версию кода. Принимает ввод в виде десятичного числа, а не в процентах. Объяснение:
Введите дробь.
Рассчитайте десятичные значения всех соотношений и возьмите абсолютную разницу с исходным вводом.
<
>
Соедините числитель и знаменатель в соответствующем соотношении с помощью
in
и напечатайте.источник
JavaScript (ES7),
164159144 байтаПопробуйте онлайн!
Как?
комментарии
источник
Желе , 58 байт
Попробуйте онлайн!
-16 байт благодаря Арно (можно просто добавить
<
и>
вместо переписывания всей фразы)-6 байт и исправления ошибок благодаря Джонатану Аллану
источник
0.3
должно привести к3 in 10
не2 in 7
µµ
, нет? EDIT - а затем полеÐṂṂ
дляÞḢ
9
в⁵
должно решить эту ошибку я считаю.Python 2 ,
261278261237177 байтПопробуйте онлайн!
источник
'\n '
на';'
... если я не ошибаюсь.Чисто ,
224198197 байтПопробуйте онлайн!
Разъяснение:
источник
Желе ,
5352 байтаПолная программа, которая печатает результат.
Попробуйте онлайн!
Или посмотрите набор тестов
Обратите внимание, что набор тестов изменен, чтобы сделать код монадической ссылкой:
³
to®
; и“ in
к“ in ”
Как?
Начинается с кода, который вызывает любую необходимую печать знака
<
или,>
а затем кода, который создает все пары числитель-знаменатель (с некоторыми избыточными не упрощенными версиями формы, все после их упрощенной формы) и печатает минимально отличную запись, оцененную делением, используя стабильную сортировать вместе сin
.источник
Perl 6 , 118 байт
Попробуйте онлайн!
источник