Giriş
Zaman kafa karıştırıcı. Altmış saniyeden bir dakikaya, altmış dakikadan bir saate, yirmi dört saatten bir güne (ve bu sinir bozucu am / pm'den bahsetmiyorum!).
Bugünlerde böyle bir saçmalık için yer yok, bu yüzden tek mantıklı alternatifi kabul etmeye karar verdik: ondalık günler! Yani, her gün 1 tam birim olarak kabul edilir ve daha kısa olan her şey o günün ondalık kısmı olarak yazılır. Yani, örneğin: "12:00:00", "0.5" ve "01:23:45", "0.058159" olarak yazılabilir.
Yeni sisteme alışmak zaman alacağından, aralarında her iki yönde de dönüşüm sağlayabilecek bir program yazmakla görevlendirildiniz.
Meydan okuma
ISO-8601 formatında "ss: dd: ss" biçiminde modern bir zaman verilen, seçtiğiniz dilde bir program yazarak eşdeğer ondalık kesir birimini döndürür. Benzer şekilde, ondalık kesir verildiğinde, program başlangıçta belirtilen modern biçimde zamanı döndürmelidir.
Aşağıdaki varsayımları yapabilirsiniz:
- Modern zaman girişi ve çıkışı "00:00:00" ile "24:00:00" arasında değişebilir
- Ondalık zaman girişi ve çıkışı "0" ile "1" arasında değişebilir ve en az 5 ondalık basamağa ("0.12345" gibi) kadar kabul / çıkış yapabilmelidir. Daha fazla hassasiyet kabul edilebilir
- Program girdiye göre hangi dönüşüm yönünün gerçekleştirileceğini bilmelidir
- Zamana bağlı işlevleri / kütüphaneleri kullanamazsınız
Kazanan, kriterleri yerine getiren en kısa kodla belirlenir. Bunlar, en az 7 ondalık gün biriminde veya yeterli sayıda gönderildiyse / gönderildiyse seçilecektir.
Örnekler
Örnek olarak kullanılacak (n bilerek) kötü yazılmış bir JavaScript kodu parçası:
function decimalDay(hms) {
var x, h, m, s;
if (typeof hms === 'string' && hms.indexOf(':') > -1) {
x = hms.split(':');
return (x[0] * 3600 + x[1] * 60 + x[2] * 1) / 86400;
}
h = Math.floor(hms * 24) % 24;
m = Math.floor(hms * 1440) % 60;
s = Math.floor(hms * 86400) % 60;
return (h > 9 ? '' : '0') + h + ':' + (m > 9 ? '' : '0') + m + ':' + (s > 9 ? '' : '0') + s;
}
decimalDay('02:57:46'); // 0.12344907407407407
decimalDay('23:42:12'); // 0.9876388888888888
decimalDay(0.5); // 12:00:00
decimalDay(0.05816); // 01:23:45
n
nereye n
2 ^ n saniyedir. Yani '6' değeri yaklaşık 1 dakikalık bir TTL'ye sahipti. '12' değerinin TTL değeri yaklaşık 1 saattir. '15' 8 saat kadar sürdü. Bir baytın zaman aşımını tanımlamasına ve kısa veya uzun süreler için yeterli kontrol sağlamasına izin verdi.