Introducción:
Al igual que Twitter e Instagram y otros, quería mostrar números como 1.2Ky en 3.8 Mlugar de 1,222o 3,823,456.
¡Pero eso no es todo! Como todos sabemos, puede haber algunos seres humanos a quienes sin duda no les gustarán estas abreviaturas y tratarán de revertirlas. Entonces, 1.2kse convertirá 1,200y 3.8 Mse convertirá 3,800,000.
La tarea:
- su tarea es escribir un programa o una función que convierta una lista de números ( que se dan como cadenas ) en sus pares abreviados y viceversa.
Por ejemplo, si la lista de entrada (o alguna STDIN) era ['1.4k', '1,234,567', '7.99M'], entonces debería generar:
['1,400', '1.2M', '7,990,000']
Puede seguir el siguiente esquema para abreviaturas:
- 10 3 -> un kilo -> K
- 10 6 -> un millón -> M
- 10 9 -> mil millones -> B
Su código puede asumir todas las minúsculas, mayúsculas, mayúsculas y minúsculas o entradas indefinidas para la entrada y usar cualquiera de estas para la salida, pero debe ser coherente.
Reglas y restricciones:
- puede escribir un programa o función, tomando la entrada a través
STDIN(o la alternativa más cercana), el argumento de la línea de comandos o el argumento de la función y generando el resultado a travésSTDOUT(o la alternativa más cercana), el valor de retorno de la función o el parámetro de la función (out). - la entrada puede estar en cualquier lista conveniente o formato de cadena. Puede suponer que son menores que cada uno y que la lista contiene al menos un elemento.
ai231 - cada número abreviado contendrá solo uno,
.mientras que un número normal contendrá tantos,como sea necesario (puede suponer que estos números no se modificarán). - usted NO PUEDE introducir un número como
'123456'sino123,456 - se aplican reglas estándar de código de golf .
Casos de prueba:
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']
Aclaraciones:
- para números <1000 después del punto decimal en la salida de abreviatura, debe tener tantos dígitos como sea necesario para obtener el resultado correcto. (por ejemplo:
2-> se convertirá0.002k) - eso significa 3 decimales como máximo ; para números> 1000 puede tener un máximo de 1 decimal . - la abreviatura puede estar en minúsculas o mayúsculas
- Eliminé la restricción incorporada como se sugiere en los comentarios
¡El código más corto en bytes gana!

'123,456,789' -> '123.4M'? Además, esto no aclara cuántos decimales usar. Seguramente, cualquier cosa por debajo de 1000 no debería ser abreviada de todos modos.["k", "M", "G"]. ¿Qué significa "mientras que un número normal contendrá tantos, según sea necesario ", en mi país sería un error usar alguno?Respuestas:
PHP,
234224213201205 bytes6 bytes guardados por insertusernamehere, 4 bytes inspirados por eso.
-r-2 bytes si el guión bajo como separador está bien: reemplazar
" "con_.-1 byte si el redondeo correcto está bien: reemplazar
($y*10|0)/10conround($y,1).-17 bytes para PHP 7.1: reemplazar
substr($x,strlen($x)-1)con$x[-1].80 (63) bytes para expandir un solo argumento:
guardar en el archivo, luego ejecutar (o reemplazar
<?=conecho+ espacio y ejecutar con-r.fuente
for($j=1;$x=$argv[$j++];)- en lugar deforeach($argv as$i=>$x)if($i)kmb[$i]- en lugar de"kmb"[$i].JavaScript,
545524522518514508504498494214 bytes¡Gracias a @ETHproductions por ahorrar 180 bytes!
Para llamar a la función:
Salidas como
alert, donde cadaalertuna contiene un elemento diferente de la entradaVersión legible:
Resumen de ediciones: función convertida en una función de flecha
var|0lugar de piso.reverse().join''fuente