PHP - 115102 bytes
Una solución en 155 bytes (envuelta aquí en 3 líneas para facilitar la lectura):
$a=$argv[1];
$h=($a-($m=($a=($a-($s=($a=($a-($t=($a=($a-($u=$a%1000))/1000)%1000))/1000)%60))/60)%60))/60;
printf("%02d:%02d:%02d:%03d:%03d",$h,$m,$s,$t,$u);
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):
$u=$argv[1];$h=($m=($s=($t=$u/1000)/1000)/60)/60;
printf("%02d:%02d:%02d:%03d:%03d",$h,$m%60,$s%60,$t%1000,$u%1000);
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
) de printf()
se utilizan para forzarlos a números enteros (se ignora la parte fraccionaria).
Otra solución que usa las funciones de fecha (102 bytes)
$u=$argv[1];
echo gmdate("H:i:s",strtotime("@".substr($u,0,-6))),":",substr($u,-6,3),":",substr($u,-3);
La parte horas: minutos: segundos es manejada por las funciones de fecha PHP gmdate()
y strtotime()
, los milisegundos y microsegundos se extraen como cadenas del valor de entrada.
Uso:
$ php -r '$u=$argv[1];echo gmdate("H:i:s",strtotime("@".substr($u,0,-6))),":",substr($u,-6,3),":",substr($u,-3);' 7198898787; echo
01:59:58:898:787
hh:mm:ss.000000
probablemente habría sido mejor (y más fácil). Aún así, no puedo ir a cambiarlo ahora.