Einführung
Die Zeit ist verwirrend. Sechzig Sekunden zu einer Minute, sechzig Minuten zu einer Stunde, vierundzwanzig Stunden zu einem Tag (und ganz zu schweigen von diesem lästigen Morgen / Morgen!).
Für eine solche Dummheit ist heutzutage kein Platz mehr, deshalb haben wir uns für die einzig sinnvolle Alternative entschieden: Dezimaltage! Das heißt, jeder Tag wird als eine ganze Einheit betrachtet, und alles Kürzere wird als Dezimalbruch dieses Tages geschrieben. So würde beispielsweise "12:00:00" als "0,5" und "01:23:45" als "0,058159" geschrieben.
Da es einige Zeit dauert, um sich an das neue System zu gewöhnen, müssen Sie ein Programm schreiben, das zwischen beiden Richtungen konvertiert.
Herausforderung
Schreiben Sie ein Programm in der Sprache Ihrer Wahl, das bei einer modernen Zeit im ISO-8601-Format "hh: mm: ss" die entsprechende Dezimalbrucheinheit zurückgibt. Ebenso sollte das Programm bei einem Dezimalbruch die Zeit in dem ursprünglich angegebenen modernen Format zurückgeben.
Sie können folgende Annahmen treffen:
- Die Ein- und Ausgabe der modernen Zeit kann von "00:00:00" bis "24:00:00" reichen.
- Die Eingabe und Ausgabe der Dezimalzeit kann von "0" bis "1" reichen und sollte in der Lage sein, bis zu mindestens 5 Dezimalstellen (z. B. "0.12345") zu akzeptieren / auszugeben. Mehr Präzision ist akzeptabel
- Das Programm sollte anhand der Eingabe wissen, welche Konvertierungsrichtung auszuführen ist
- Sie können keine zeitbezogenen Funktionen / Bibliotheken verwenden
Der Gewinner wird anhand des kürzesten Codes ermittelt, der die Kriterien erfüllt. Sie werden in Einheiten von mindestens 7 Dezimaltagen ausgewählt, oder wenn / wenn es genügend Einreichungen gegeben hat.
Beispiele
Hier ist ein (absichtlich) schlecht geschriebener Teil des JavaScript-Codes, der als Beispiel dienen soll:
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
dem n
2 ^ n Sekunden liegen. Ein Wert von '6' hatte also eine TTL von ungefähr 1 Minute. Ein Wert von '12' hatte eine TTL von ungefähr 1 Stunde. 15 war ungefähr 8 Stunden und so weiter. Es erlaubte einem Byte, das Zeitlimit zu definieren und Ihnen genügend Kontrolle für kurze oder lange Zeiten zu geben.