PHP - 115 102 byte
Una soluzione in 155 byte (racchiusa qui su 3 righe per leggibilità):
$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 seconda riga calcola (dall'interno verso l'esterno) i valori esatti dei componenti a partire dai microsecondi.
La versione più corta (115 byte, racchiusa in due righe per la leggibilità):
$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);
Utilizza anche le assegnazioni incorporate per calcolare la conversione del numero di input di microsecondi in millisecondi, secondi, minuti e ore utilizzando numeri in virgola mobile. L'operatore modulo ( %
) e il formato numerico decimale ( %d
) di printf()
vengono quindi utilizzati per forzarli a numeri interi (la parte frazionaria viene ignorata).
Un'altra soluzione che utilizza le funzioni di data (102 byte)
$u=$argv[1];
echo gmdate("H:i:s",strtotime("@".substr($u,0,-6))),":",substr($u,-6,3),":",substr($u,-3);
Le ore: minuti: la parte dei secondi è gestita dalle funzioni della data di PHP gmdate()
e strtotime()
, i milli e i micro-secondi vengono estratti come stringhe dal valore di input.
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
probabilmente sarebbe stato migliore (e più semplice). Tuttavia, non posso cambiarlo ora.