pengantar
Waktu membingungkan. Enam puluh detik hingga satu menit, enam puluh menit hingga satu jam, dua puluh empat jam per hari (dan belum lagi sialnya am / pm!).
Tidak ada ruang untuk kekonyolan seperti saat ini, jadi kami telah memutuskan untuk mengadopsi satu-satunya alternatif yang masuk akal: hari desimal! Dengan kata lain, setiap hari dianggap 1 unit keseluruhan, dan apa pun yang lebih pendek ditulis sebagai pecahan desimal hari itu. Jadi, misalnya: "12:00:00" akan ditulis sebagai "0,5", dan "01:23:45" mungkin ditulis sebagai "0,058159".
Karena akan membutuhkan waktu untuk membiasakan diri dengan sistem yang baru, Anda ditugasi untuk menulis sebuah program yang dapat mengkonversi di antara mereka di kedua arah.
Tantangan
Tulis program dalam bahasa pilihan Anda, yang diberi waktu modern dalam format ISO-8601 "hh: mm: ss", akan mengembalikan unit pecahan desimal yang setara. Demikian juga, mengingat pecahan desimal, program harus mengembalikan waktu dalam format modern yang ditentukan sebelumnya.
Anda dapat membuat asumsi berikut:
- Input dan output waktu modern dapat berkisar dari "00:00:00" hingga "24:00:00"
- Input dan output waktu desimal dapat berkisar dari "0" hingga "1", dan harus dapat menerima / output hingga setidaknya 5 tempat desimal (seperti "0,12345"). Lebih presisi bisa diterima
- Program harus dapat mengetahui arah konversi yang akan dijalankan berdasarkan input
- Anda tidak dapat menggunakan fungsi / perpustakaan terkait waktu
Pemenang akan ditentukan oleh kode terpendek yang memenuhi kriteria. Mereka akan dipilih dalam setidaknya 7 unit hari desimal, atau jika / ketika ada cukup kiriman.
Contohnya
Berikut adalah (n sengaja) sepotong kode JavaScript yang ditulis dengan buruk untuk digunakan sebagai contoh:
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
mana n
adalah 2 ^ n detik. Jadi nilai '6' memiliki TTL sekitar 1 menit. Nilai '12' memiliki TTL sekitar 1 jam. '15' sekitar 8 jam dan seterusnya. Itu memungkinkan satu byte untuk menentukan batas waktu dan memberi Anda kontrol yang cukup untuk waktu pendek atau panjang.