Introducción:
Al igual que Twitter e Instagram y otros, quería mostrar números como 1.2K
y en 3.8 M
lugar de 1,222
o 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.2k
se convertirá 1,200
y 3.8 M
se 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.
ai
231
- 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)/10
conround($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 cadaalert
una contiene un elemento diferente de la entradaVersión legible:
Resumen de ediciones: función convertida en una función de flecha
var
|0
lugar de piso.reverse().join''
fuente