bash, 78 bajtów (przy użyciu narzędzia BSD) lub 79 bajtów (również innych niż BSD)
Jest to trochę dłużej niż dobre 71-bajtowe rozwiązanie bash @DigitalTrauma i @ hvd, ale podobał mi się pomysł użycia liczb w bazie 60; Jestem ciekawy, czy ktoś może trochę bardziej pograć w golfa.
Za pomocą narzędzia jot w standardzie BSD:
jot '-wx=`dc<<<60do3^%d+n`;((`dc<<<$x++'$1'-n`))||tr \ :<<<${x:3}' 86400 0|sh
Dzięki bardziej powszechnie dostępnemu narzędziu Seq:
seq '-fx=`dc<<<60do3^%.f+n`;((`dc<<<$x++'$1'-n`))||tr \ :<<<${x:3}' 0 86399|sh
Chodzi o to, aby wygenerować liczby od 0 do 83699 i użyć dc do przekonwertowania ich na bazę 60. „Cyfry” na wyjściu dc base-60 to 2-cyfrowe liczby od 00 do 59, ze spacjami oddzielającymi „cyfry”, więc wyświetla wszystkie pożądane czasy od 00 00 00 do 23 59 59 w prawie wymaganym formacie.
Jeśli jednak dosłownie to wykonasz, liczby poniżej 60 ^ 2 nie są trzycyfrowymi liczbami w podstawie 60, więc brakuje początkowej 00 lub 00 00. Z tego powodu generuję liczby od 60 ^ 3 do 60 ^ 3 + 83699; zapewnia to, że wszystkie wygenerowane liczby mają dokładnie 4 cyfry długości w bazie 60. Jest to OK, o ile w końcu wyrzucę dodatkową pierwszą cyfrę (01), która nie jest potrzebna.
Tak więc po wygenerowaniu pożądanych czasów po prostu biorę każdy poczwórny od 01 00 00 00 do 01 23 59 59, dodam trzy ostatnie liczby i odejmuję argument $ 1. Jeśli to 0, biorę wszystko czterokrotnie od trzeciej postaci (wyrzucając „01”), używam tr, aby konwertować spacje na dwukropki i wydrukować wynik.