PHP - 115 102 bajtów
Rozwiązanie w 155 bajtach (umieszczone tutaj w 3 wierszach dla czytelności):
$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);
Druga linia oblicza (od wewnątrz na zewnątrz) dokładne wartości składników, zaczynając od mikrosekund.
Krótsza wersja (115 bajtów, owinięta w dwa wiersze dla czytelności):
$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);
Wykorzystuje również wbudowane przypisania do obliczenia konwersji liczby wejściowej mikrosekund w milisekundach, sekundach, minutach i godzinach przy użyciu liczb zmiennoprzecinkowych. Operator modułu ( %
) i format liczb dziesiętnych ( %d
) printf()
są następnie używane do wymuszenia ich na liczbach całkowitych (część ułamkowa jest ignorowana).
Inne rozwiązanie wykorzystujące funkcje daty (102 bajty)
$u=$argv[1];
echo gmdate("H:i:s",strtotime("@".substr($u,0,-6))),":",substr($u,-6,3),":",substr($u,-3);
Godzinach: min: sek część obsługiwana przez funkcji daty PHP gmdate()
i strtotime()
, The mili- i mikrosekund ekstrahowane są jako ciągi od wartości sygnału wejściowego.
Stosowanie:
$ 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
prawdopodobnie byłby lepszy (i łatwiejszy). Nadal nie mogę go teraz zmienić.