Introdução:
Como o Twitter, o Instagram e outros, eu queria exibir números como 1.2Ke em 3.8 Mvez de 1,222ou 3,823,456.
Mas isso não é tudo! Como todos sabemos, pode haver alguns seres humanos que, sem dúvida, não gostam dessas abreviações e tentam revertê-las. Então, 1.2kse tornará 1,200e 3.8 Mse tornará 3,800,000.
A tarefa:
- sua tarefa é escrever um programa ou uma função que converta uma lista de números ( que são dados como cadeias ) em seus pares abreviados e vice-versa.
Por exemplo, se a lista de entrada (ou qualquer uma STDIN) fosse ['1.4k', '1,234,567', '7.99M'], você deve gerar:
['1,400', '1.2M', '7,990,000']
Você pode seguir o próximo esquema para abreviações:
- 10 3 -> um quilo -> K
- 10 6 -> um milhão -> M
- 10 9 -> um bilhão -> B
Seu código pode assumir todas as letras minúsculas, todas as maiúsculas, maiúsculas ou minúsculas para entrada e usar qualquer uma dessas para saída, mas deve ser consistente.
Regras e restrições:
- você pode escrever um programa ou função, recebendo entrada via
STDIN(ou alternativa mais próxima), argumento da linha de comando ou argumento da função e emitindo o resultado viaSTDOUT(ou alternativa mais próxima), valor de retorno da função ou parâmetro da função (saída). - A entrada pode estar em qualquer formato conveniente de lista ou string. Você pode assumir que são menores que cada um e que a lista contém pelo menos um elemento.
ai231 - cada número abreviado conterá apenas um,
.enquanto um número normal conterá quantos forem,necessários (você pode presumir que esses números não serão alterados). - você NÃO PODE inserir um número,
'123456'mas sim123,456 - aplicam -se regras de código-golfe padrão .
Casos de teste:
Input: ['1.5M', '77.6k', '123,456,789'] Output: ['1,500,000', '77,600', '123.4M']
Input: ['3,000,000,000', '581k', '2b'] Output: ['3B', '581,000', '2,000,000,000']
Input: ['0.1k'] Output: ['100']
Input: ['888', '33'] Output: ['0.888k', '0.033k']
Esclarecimentos:
- para números <1000 após o ponto decimal na saída da abreviação, você deve ter quantos dígitos forem necessários para obter o resultado correto. (por exemplo:
2-> se tornará0.002k) - isso significa no máximo 3 casas decimais ; para números> 1000, você pode ter no máximo 1 decimal . - a abreviação pode estar em maiúsculas ou minúsculas
- Eu removi a restrição interna, conforme sugerido nos comentários
O código mais curto em bytes vence!
'123,456,789' -> '123.4M'? Além disso, isso não esclarece quantas casas decimais usar. Certamente qualquer coisa abaixo de 1000 não precisa ser abreviada de qualquer maneira.
["k", "M", "G"]. O que significa "embora um número normal contenha o número necessário " significa que, no meu país, seria um erro usá-lo.