Usted administra un sitio web político y ha determinado que las personas tienen una mejor comprensión intuitiva cuando la posibilidad de ganar o perder una elección se expresa como una proporción ("5 en 7") que cuando se expresa como un porcentaje ("71%" )
Pero tampoco desea mostrar proporciones confusas como "58 en 82", le gustaría que se entiendan más fácilmente, incluso si no son tan precisas.
Entonces, dado un porcentaje entre 0.1% y 99.9%, devuelva la relación "fácil de entender" más cercana " x en y ", usando las siguientes reglas :
- La mayoría de los valores (ver excepciones a continuación) deberían devolver la relación más cercana de 10 o menos . El 55% debería devolver "5 en 9", no "11 en 20".
- Las proporciones deben reducirse a sus términos más bajos . El 65% debería devolver "2 en 3", no "4 en 6".
- Los valores inferiores al 10% deben devolver la relación más cercana de la forma " 1 en n " donde n es uno de (10,12,15,20,30,40,50,60,70,80,90,100) . Por ejemplo, el 6% debería devolver "1 en 15".
- Los valores superiores al 90% deben devolver la relación más cercana de la forma " n-1 en n " donde n es uno de (10,12,15,20,30,40,50,60,70,80,90,100) . Por ejemplo, el 98.7% debería devolver "79 en 80".
- Los valores inferiores al 1% deberían devolver " <1 en 100 "
- Los valores superiores al 99% deberían devolver " > 99 en 100 "
O, para pensarlo de otra manera, su programa debería devolver la relación más cercana de las siguientes salidas posibles (he incluido sus valores aproximados para su conveniencia):
<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
Otras estipulaciones:
- La entrada numérica puede estar en el rango de 0.1 a 99.9 o en el rango de 0.001 a 0.999 , lo que sea más conveniente. Debe manejar al menos 3 dígitos significativos.
- Debes generar una relación ("3 en 4"), no la fracción equivalente ("3/4").
- Si hay dos proporciones igualmente cercanas a la entrada, su programa puede devolver cualquiera de ellas. El 7,5% podría devolver "1 en 12" o "1 en 15".
- Los espacios en blanco iniciales / finales y / o las nuevas líneas están bien
Ejemplos :
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
Esto es un desafío de código de golf , gana el código más corto en cada idioma.
(Similar a, pero no duplicado de: Convertir un decimal en fracción , Fracción más cercana , Número aproximado de coma flotante con precisión de n dígitos )
fuente
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"
¿Eso significa que podemos volver7 in 100
también? Por cierto,1 in 14
está más cerca de la entrada en este caso.Respuestas:
T-SQL, 385 bytes
La entrada es a través de la tabla preexistente t con campo numérico i , según nuestros estándares IO .
Esa tabla de entrada se une con una tabla en memoria analizada desde una cadena a través de
STRING_SPLIT
(que separa filas) yPARSENAME
(que separa numerador y denominador vía.
).La tabla se ordena por distancia desde el valor de entrada i , y devuelve la fila superior, formateada adecuadamente.
fuente
Carbón , 84 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Toma la entrada como un decimal en lugar de un porcentaje. Explicación:
Ingrese la fracción.
Calcule los valores decimales de todas las razones y tome la diferencia absoluta con la entrada original.
<
>
Une el numerador y el denominador de la proporción apropiada con
in
e imprime.fuente
JavaScript (ES7),
164159144 bytesPruébalo en línea!
¿Cómo?
Comentado
fuente
Jalea , 58 bytes
Pruébalo en línea!
-16 bytes gracias a Arnauld (solo puede anteponer el
<
y en>
lugar de reescribir la frase completa)-6 bytes y corrección de errores gracias a Jonathan Allan
fuente
0.3
debería resultar en3 in 10
no2 in 7
µµ
, ¿no? EDITAR - y luego de golfÐṂṂ
aÞḢ
9
a⁵
debería resolver el error, creo.Python 2 ,
261278261237177 bytesPruébalo en línea!
fuente
'\n '
con';'
... a menos que me equivoque.Limpias ,
224198197 bytesPruébalo en línea!
Explicado:
fuente
Jalea ,
5352 bytesUn programa completo que imprime el resultado.
Pruébalo en línea!
O ver el pruebas
Tenga en cuenta que el conjunto de pruebas se modifica para hacer que el código sea un enlace monádico al:
³
a®
; y“ in
a“ in ”
¿Cómo?
Comienza con un código que fuerza cualquier impresión necesaria del signo
<
o>
y luego el código que construye todos los pares de numerador-denominador (con algunas versiones redundantes no simplificadas, todo después de su forma simplificada) e imprime la entrada mínimamente evaluada evaluada por división usando un estable tipo unido conin
.fuente
Perl 6 , 118 bytes
Pruébalo en línea!
fuente