Lo siguiente está inspirado en una pregunta que surgió hoy en Stack Overflow .
Dado un número de microsegundos, 0 <= n <= 86400000000
(ej. 12345678900
), Genera una cadena formateada hh:mm:ss:000:000
, ej 03:25:45:678:900
.
0 -> '00:00:00:000:000'
12345678900 -> '03:25:45:678:900'
86400000000 -> '24:00:00:000:000'
Tengo una solución en Python en 209 bytes, pero ¿puede bajar?
hh:mm:ss.000000
probablemente habría sido mejor (y más fácil). Aún así, no puedo ir a cambiarlo ahora.Respuestas:
Python 2,
8279 bytesConstruye la cadena, iterando a través de una serie de divmods. Lo único elegante es el
%7/2
, que asigna1000 -> 3
y60 -> 2
.fuente
Pyth, 31 bytes
Pruébelo en línea: demostración
Explicación:
fuente
Bash + coreutils, 61
El lenguaje "convencional" más corto hasta ahora ...
Prueba de salida:
fuente
CJam,
37 3534 bytesEsto es bastante largo ... Jugar al golf ahora ...
ACTUALIZACIÓN: 1 byte guardado gracias a @ Sp3000
Pruébalo en línea aquí
fuente
C, 97 bytes
Código de prueba:
fuente
q (34)
Estoy seguro de que puede ser más corto
p.ej
fuente
":"sv 0 8 11__[;8]15$2_($)"n"$1e3*
Julia,
1109695 bytesEsto crea una función sin nombre que acepta un entero como entrada y devuelve una cadena. Para llamarlo, dale un nombre, por ejemplo
f=t->...
.Ungolfed + explicación:
Ejemplos:
fuente
C #,
179175 bytesCuando tenga builtins a su disposición, ¿por qué no usarlos?
Con mejor formato:
fuente
Excel,
6563 caracteresAsumiendo que sus microsegundos están en A1 :
Salida:
fuente
Perl,
14178 bytes77 bytes de código, +1 para la
-n
bandera. Corre con:Gracias a Thomas Kwa y chilemagic por cortar el tamaño de mi código casi a la mitad.
fuente
3600000000
puede ser36e8
.chomp($n=<STDIN>);
hacerlo, puede ejecutarlo como una línea con la-n
bandera (que cuenta como 1 carácter). Tampoco necesitas elint(..)
alrededor de cada uno$_
. ¡Aplicando la punta de Thomas también podemos obtenerlaecho 12345678900 | perl -ne'printf"%02d:%02d:%02d:%03d:%03d\n",$_/36e8,$_/6e7%60,$_/1e6%60,$_/1e3%1e3,$_%1e3'
e incluso podría haber una forma más corta también!\n
en la cadena de salida. También puede reemplazar la cadena con"%02d:"x3 ."%03d:%03d"
printf"%02d:%02d:%02d:%03d:%03d\n",$_/36e8,$_/6e7%60,$_/1e6%60,$_/1e3%1e3,$_%1e3
y luego agrega un byte adicional para la-n
bandera. Si usó,-nle
por ejemplo, eso contaría como un 2 adicional (para eln
y ell
). Obtiene el-
y ele
(oE
si necesita usarsay
) de forma gratuita.Matlab - 88
89bytesGanó un byte con una solución sin usar la función integrada:
Cree una función en línea que tome un argumento de entrada numérico
t
y devuelva una cadena.utiliza una combinación vectorizada de
fix
ymod
para separar los elementos de tiempo, luego se muestra.Es un poco frustrante que el formato de la cadena de salida tome tanto, más que los cálculos en sí ...
Prueba:
Versión de 89 bytes:
Divide el número, usa una función incorporada para la parte hh: mm: ss, que no puede tratar con microsegundos, por lo que la cadena se completa con la combinación de
fix
ymod
operacionesfuente
JavaScript (ES6),
128118116111 bytesProbablemente haya algo de golf en esto.
Manifestación
Es ES6, así que solo Firefox, por ahora de todos modos:
fuente
C,
113103105 bytesEDITAR: empujó algunos bytes más
REVISIÓN: tipo largo eliminado, gracias a algún usuario
No es la respuesta C más corta, pero me divertí con los retornos de carro, así que sentí que a alguien le podría gustar esto.
Llámalo como:
fuente
CoffeeScript, 127 bytes
Tomó el enfoque en la respuesta de ASCIIThenANSI . Es una pena que la API de la consola de JavaScript no tenga marcadores de posición de formato para los números de relleno.
fuente
Powershell, 153
Uso
fuente
F #,
11192102 bytesPrimera iteración: idea base.
Segunda iteración: constantes más pequeñas
Tercera iteración: formato correcto para porciones de un solo dígito.
Tenga en cuenta que esta función debe tener un int64 para que funcione.
Salidas de ejemplo:
fuente
PHP -
115102bytesUna solución en 155 bytes (envuelta aquí en 3 líneas para facilitar la lectura):
La segunda línea calcula (de adentro hacia afuera) los valores exactos de los componentes que comienzan con los microsegundos.
La versión más corta (115 bytes, envuelta en dos líneas para facilitar la lectura):
También utiliza asignaciones incrustadas para calcular la conversión del número de entrada de microsegundos en milisegundos, segundos, minutos y horas utilizando números de coma flotante. El operador de módulo (
%
) y el formato de número decimal (%d
) deprintf()
se utilizan para forzarlos a números enteros (se ignora la parte fraccionaria).Otra solución que usa las funciones de fecha (102 bytes)
La parte horas: minutos: segundos es manejada por las funciones de fecha PHP
gmdate()
ystrtotime()
, los milisegundos y microsegundos se extraen como cadenas del valor de entrada.Uso:
fuente
Java, 215 bytes
Method
f
realiza algunos cálculosn
para calcular las horas, minutos, etc. y delega al métodop
para formatear cada valor correctamente.Formateado:
Uso:
fuente
Rubí: 82 bytes
fuente