bash, 78 bayt (bir BSD yardımcı programı kullanarak) veya 79 bayt (ayrıca BSD olmayan)
Bu @DigitalTrauma ve @ hvd'nin güzel 71 baytlık bash çözümünden biraz daha uzun, ama ben burada 60 bazda sayıları kullanma fikrini sevdim; Biri bunu biraz daha golf edebilir mi merak ediyorum.
BSD standardı jot yardımcı programı ile:
jot '-wx=`dc<<<60do3^%d+n`;((`dc<<<$x++'$1'-n`))||tr \ :<<<${x:3}' 86400 0|sh
Daha evrensel olarak bulunan seq aracıyla:
seq '-fx=`dc<<<60do3^%.f+n`;((`dc<<<$x++'$1'-n`))||tr \ :<<<${x:3}' 0 86399|sh
Fikir, 0 ila 83699 arasındaki sayıları oluşturmak ve bunları taban 60'a dönüştürmek için dc kullanmaktır. DC'nin taban 60 çıkışındaki "basamaklar", "basamakları" ayıran boşluklarla, 00 - 59 arasında 2 basamaklı sayılardır. Bu, istenen formatta 00 00 00 - 23 59 59 arasındaki tüm istenen süreleri neredeyse gereken biçimde listeler.
Kelimenin tam anlamıyla bunu yaparsanız, 60 ^ 2'nin altındaki sayılar, 60 tabanındaki 3 basamaklı sayılar değildir, bu nedenle ilk 00 veya 00 00 eksiktir. Bu nedenle aslında 60 ^ 3 ile 60 ^ 3 + 83699 arasındaki rakamları üretiyorum; bu, üretilen tüm sayıların 60. üssünde 4 basamak uzunluğunda olmasını sağlar. Sonunda, gerekli olmayan ekstra ilk basamağı (01) attığım sürece, bu tamamdır.
Böylece, istenen zamanlar oluşturulduktan sonra, her dörtlüsü sadece 01 00 00 00 - 01 23 59 59 arasında alırım, son üç sayıyı ekler ve $ 1 argümanını çıkarırım. Eğer 0 ise, daha sonra her şeyi dört karakterden 3. karakterden itibaren ("01" atma) alıyorum, boşlukları iki noktaya dönüştürmek ve sonucu yazdırmak için tr 'i kullanıyorum.