Você administra um site político e determinou que as pessoas têm uma melhor compreensão intuitiva quando a chance de ganhar ou perder uma eleição é expressa como uma proporção ("5 em 7") do que quando é expressa como uma porcentagem ("71%" )
Mas você também não deseja exibir proporções confusas como "58 em 82"; gostaria que elas fossem mais facilmente compreendidas, mesmo que não sejam tão precisas.
Portanto, considerando uma porcentagem entre 0,1% e 99,9%, retorne a proporção "mais fácil de entender" " x em y " mais próxima , usando as seguintes regras :
- A maioria dos valores (consulte as exceções abaixo) deve retornar a proporção mais próxima de 10 ou inferior . 55% devem retornar "5 em 9", não "11 em 20".
- Os índices devem ser reduzidos para os termos mais baixos . 65% devem retornar "2 em 3", não "4 em 6".
- Valores abaixo de 10% devem retornar a proporção mais próxima do formato " 1 em n ", em que n é um de (10,12,15,20,30,40,50,60,70,80,90,100) . Por exemplo, 6% devem retornar "1 em 15".
- Valores acima de 90% devem retornar a proporção mais próxima da forma " n-1 em n ", em que n é um de (10,12,15,20,30,40,50,60,70,80,90,100) . Por exemplo, 98,7% devem retornar "79 em 80".
- Valores abaixo de 1% devem retornar " <1 em 100 "
- Valores acima de 99% devem retornar " > 99 em 100 "
Ou, para pensar de outra maneira, seu programa deve retornar a proporção mais próxima das seguintes saídas possíveis (incluímos os valores aproximados para sua conveniência):
<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
Outras estipulações:
- A entrada numérica pode estar no intervalo de 0,1 a 99,9 ou no intervalo de 0,001 a 0,999 , o que for mais conveniente. Você deve manipular pelo menos três dígitos significativos.
- Você deve gerar uma proporção ("3 em 4"), não a fração equivalente ("3/4").
- Se houver duas proporções igualmente próximas da entrada, seu programa poderá retornar uma delas. 7,5% podem retornar "1 em 12" ou "1 em 15".
- Os espaços em branco à esquerda / à direita e / ou novas linhas são bons
Exemplos :
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
Este é um desafio do código-golfe , o código mais curto em cada idioma vence.
(Semelhante a, mas não duplicado: converter um decimal em uma fração , fração mais próxima , número aproximado de ponto flutuante com precisão de n dígitos )
fonte
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"
Isso significa que também podemos voltar7 in 100
? Aliás,1 in 14
está mais próximo da entrada neste caso.Respostas:
T-SQL, 385 bytes
A entrada é via tabela preexistente t com campo numérico i , de acordo com nossos padrões de IO .
Essa tabela de entrada é unida a uma tabela na memória analisada de uma string via
STRING_SPLIT
(que separa linhas) ePARSENAME
(que separa numerador e denominador via.
).A tabela é classificada pela distância do valor de entrada i e retorna a linha superior, formatada adequadamente.
fonte
Carvão , 84 bytes
Experimente online! Link é a versão detalhada do código. Recebe a entrada como decimal e não como porcentagem. Explicação:
Insira a fração.
Calcule os valores decimais de todas as proporções e calcule a diferença absoluta com a entrada original.
<
>
Junte o numerador e o denominador da proporção apropriada com
in
e imprima.fonte
JavaScript (ES7),
164159144 bytesExperimente online!
Quão?
Comentado
fonte
Geléia , 58 bytes
Experimente online!
-16 bytes graças a Arnauld (pode apenas incluir o prefixo
<
e, em>
vez de reescrever a frase inteira)-6 bytes e correções de erros graças a Jonathan Allan
fonte
0.3
deve resultar em3 in 10
não2 in 7
µµ
, não? EDIT - e depois golfÐṂṂ
paraÞḢ
9
para⁵
deve resolver o erro que eu acredito.Python 2 ,
261278261237177 bytesExperimente online!
fonte
'\n '
por';'
... a menos que eu esteja errado.Limpo ,
224198197 bytesExperimente online!
Explicado:
fonte
Geléia ,
5352 bytesUm programa completo que imprime o resultado.
Experimente online!
Ou veja a suíte de testes
Observe que o conjunto de teste é alterado para tornar o código um link monádico por:
³
a®
; e“ in
a“ in ”
Quão?
Começa com um código que força qualquer impressão necessária do sinal
<
ou>
e depois cria um código que constrói todos os pares numerador-denominador (com algumas versões redundantes de formulários não simplificados, todos após o formulário simplificado) e imprime a entrada avaliada por divisão minimamente diferente usando uma impressão estável classificar juntoin
.fonte
Perl 6 , 118 bytes
Experimente online!
fonte