PHP - 115 102 байти
Рішення в 155 байт (обгорнуте тут на 3 рядки для читабельності):
$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);
Другий рядок обчислює (зсередини назовні) точні значення компонентів, починаючи з мікросекунд.
Більш коротка версія (115 байт, загорнуті на два рядки для читабельності):
$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);
Він також використовує вбудовані завдання для обчислення конвертованого вхідного числа мікросекунд у мілісекунди, секунди, хвилини та години, використовуючи числа з плаваючою комою. Оператор модуля ( %
) та формат десяткових чисел ( %d
) of printf()
потім використовуються для примушення їх до цілих чисел (дробова частина ігнорується).
Ще одне рішення, яке використовує функції дати (102 байти)
$u=$argv[1];
echo gmdate("H:i:s",strtotime("@".substr($u,0,-6))),":",substr($u,-6,3),":",substr($u,-3);
Години: хвилини: секунди частина обробляється з допомогою функцій дати РНР gmdate()
і strtotime()
, то і мікро Міллі-секунди витягуються в вигляді рядка з вхідного значення.
Використання:
$ 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
, мабуть, було б краще (і простіше). Тим не менш, зараз не можу продовжувати її змінювати.