Vous dirigez un site Web politique et avez déterminé que les gens ont une meilleure compréhension intuitive lorsque la chance de gagner ou de perdre une élection est exprimée sous forme de ratio ("5 sur 7") que lorsqu'elle est exprimée en pourcentage ("71%"). ).
Mais vous ne voulez pas non plus afficher des rapports confus comme "58 en 82", vous souhaitez qu'ils soient plus faciles à comprendre, même s'ils ne sont pas aussi précis.
Donc, étant donné un pourcentage compris entre 0,1% et 99,9%, renvoyez le rapport "facile à comprendre" le plus proche " x en y ", en utilisant les règles suivantes :
- La plupart des valeurs (voir les exceptions ci-dessous) doivent renvoyer le rapport plus proche sur 10 ou moins . 55% devraient renvoyer "5 en 9", pas "11 en 20".
- Les ratios devraient être réduits à leur plus bas niveau . 65% devraient retourner "2 en 3", pas "4 en 6".
- Les valeurs inférieures à 10% devraient renvoyer le rapport le plus proche de la forme " 1 sur n " où n est l'un de (10,12,15,20,30,40,50,60,70,80,90,100) . Par exemple, 6% devraient renvoyer "1 sur 15".
- Les valeurs supérieures à 90% doivent renvoyer le rapport le plus proche de la forme " n-1 en n ", où n est l'un de (10,12,15,20,30,40,50,60,70,80,90,100) . Par exemple, 98,7% devraient renvoyer "79 en 80".
- Les valeurs inférieures à 1% doivent renvoyer " <1 sur 100 "
- Les valeurs supérieures à 99% devraient renvoyer " > 99 sur 100 "
Ou, pour y penser autrement, votre programme devrait renvoyer le rapport le plus proche des sorties possibles suivantes (j'ai inclus leurs valeurs approximatives pour votre commodité):
<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
Autres stipulations:
- L'entrée numérique peut être comprise entre 0,1 et 99,9 ou entre 0,001 et 0,999 , selon ce qui est le plus pratique. Vous devez gérer au moins 3 chiffres significatifs.
- Vous devez générer un rapport ("3 en 4"), pas l'équivalent fraction ("3/4").
- S'il y a deux ratios également proches de l'entrée, votre programme peut retourner l'un ou l'autre. 7,5% pourraient renvoyer «1 sur 12» ou «1 sur 15».
- Les espaces blancs en tête / arrière et / ou les nouvelles lignes sont très bien
Exemples :
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
Ceci est un code-golf défi de , le code le plus court dans chaque langue gagne.
(Similaire à, mais pas en double: convertir une décimale en fraction , fraction la plus proche , nombre à virgule flottante approximatif avec une précision à n chiffres )
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"
Est-ce à dire que nous pouvons également revenir7 in 100
? Btw,1 in 14
est plus proche de l'entrée dans ce cas.Réponses:
T-SQL, 385 octets
L'entrée se fait via la table préexistante t avec le champ numérique i , selon nos normes IO .
Cette table d'entrée est jointe à une table en mémoire analysée à partir d'une chaîne via
STRING_SPLIT
(qui sépare les lignes) etPARSENAME
(qui sépare le numérateur et le dénominateur via.
).Le tableau est trié par distance de la valeur d'entrée i et renvoie la ligne supérieure, formatée de manière appropriée.
la source
Fusain , 84 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Prend l'entrée sous forme décimale plutôt que sous forme de pourcentage. Explication:
Saisissez la fraction.
Calculez les valeurs décimales de tous les ratios et prenez la différence absolue avec l'entrée d'origine.
Trouvez l'indice de la différence la moins absolue. En cas d'égalité (ex.12 24 ), prenez le rapport généré en premier.
Imprimer un0,01 .
<
si l'entrée est inférieure àImprimer un0,99 .
>
si l'entrée est supérieure àJoignez le numérateur et le dénominateur du rapport approprié avec
in
et imprimez.la source
JavaScript (ES7),
164159144 octetsAttend un rapport d'entrée] 0 , 1 [ .
Essayez-le en ligne!
Comment?
Nous essayons tous les ratios possiblesp / q . Pour chacun d'eux, nous calculons:
Nous mettons à jour le meilleur scorem (plus bas, mieux c'est) à chaque fois ré est inférieur ou égal à m .
Nous partons de la valeur la plus élevée deq au plus bas, de sorte qu'un plus petit dénominateur est préféré en cas d'égalité.
Commenté
la source
Gelée , 58 octets
Essayez-le en ligne!
-16 octets grâce à Arnauld (peut simplement ajouter le
<
et>
au lieu de réécrire toute la phrase)-6 octets et corrections de bugs grâce à Jonathan Allan
la source
0.3
devrait se traduire par3 in 10
pas2 in 7
µµ
, non? EDIT - puis golfÐṂṂ
pourÞḢ
9
pour⁵
devrait résoudre le bogue je crois.Python 2 ,
261278261237177 octetsEssayez-le en ligne!
la source
'\n '
par';'
... sauf erreur.Nettoyer ,
224198197 octetsEssayez-le en ligne!
Expliqué:
la source
Gelée ,
5352 octetsUn programme complet qui imprime le résultat.
Essayez-le en ligne!
Ou consultez la suite de tests
Notez que la suite de tests est modifiée pour faire du code un lien monadique en:
³
to®
; et“ in
pour“ in ”
Comment?
Commence par un code qui force toute impression nécessaire du signe
<
ou>
, puis un code qui construit toutes les paires numérateur-dénominateur (avec certaines versions de formulaire redondantes non simplifiées, toutes après leur forme simplifiée) et imprime l'entrée évaluée par division à minima différente en utilisant une stable sorte rejoint avecin
.la source
Perl 6 , 118 octets
Essayez-le en ligne!
la source