前書き
時間は混乱しています。60秒から1分、60分から1時間、24時間から1日(そして厄介なam / pmは言うまでもありません!)。
今日、そのような愚かさの余地はないので、私たちは唯一の賢明な代替案を採用することに決めました:小数日!つまり、各日は1単位とみなされ、それより短いものはその日の小数部として書き込まれます。たとえば、「12:00:00」は「0.5」と記述され、「01:23:45」は「0.058159」と記述されます。
新しいシステムに慣れるには時間がかかるため、双方向で変換できるプログラムを作成する必要があります。
チャレンジ
「hh:mm:ss」のISO-8601形式で現代の時刻を指定すると、選択した言語でプログラムを記述し、同等の10進小数単位を返します。同様に、小数を指定すると、プログラムは最初に指定された最新の形式で時刻を返す必要があります。
次の前提を立てることができます。
- 現代の時間の入力と出力は、「00:00:00」から「24:00:00」の範囲で指定できます
- 10進数の時間の入力と出力の範囲は「0」から「1」であり、最大5桁の小数点以下桁数(「0.12345」など)を受け入れ/出力できる必要があります。より高い精度が許容されます
- プログラムは、入力に基づいて実行する変換方向を認識できる必要があります。
- 時間関連の関数/ライブラリを使用できません
勝者は、基準を達成する最短のコードによって決定されます。それらは、少なくとも10進数の7日単位で、または十分な提出があった場合に/選択されます。
例
例として使用するJavaScriptコードの(意図的に)不十分な記述を以下に示します。
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