Computer sind heutzutage überall - in Autos, Zügen, Skateboards, sogar in Atomreaktoren. Die Möglichkeit, dass Ihre Software auf einem Zeitreisegerät ausgeführt wird, ist nur eine Frage der Zeit. Kannst du damit umgehen? Kannst du es wenigstens entdecken?
Deine Aufgabe:
- Schreiben Sie ein Programm, das sich wiederholt und die Systemzeit abfragt, um Zeitreisen zu erkennen.
- Wenn die Zeit zwischen zwei aufeinanderfolgenden Abfragen um einen Tag oder mehr nach vorne verschoben wird, ist dies die Zeitreise nach vorne. In diesem Fall sollte Ihr Programm Folgendes ausgeben:
TS TS: YYYY? You mean we're in the future?
- Wenn die Zeit zwischen zwei aufeinanderfolgenden Abfragen um einen bestimmten Betrag zurückgeht, ist dies eine Zeitreise in die Vergangenheit. In diesem Fall sollte Ihr Programm Folgendes ausgeben:
TS TS: Back in good old YYYY.
TS TS
sind die Zeitstempel vor und nach der Zeitreise.YYYY
ist das Zieljahr.- Zeitstempel können in einem beliebigen Format vorliegen, das mindestens vierstellige Jahres-, Monats-, Tages-, Stunden-, Minuten- und Sekundenangaben enthält, die durch keine Ziffern voneinander getrennt sind.
Einschränkungen:
- Sie müssen Daten aus dem 19., 20. und 21. Jahrhundert unterstützen.
- Sie müssen eine Sprache verwenden, die vor dem Posten dieser Herausforderung vorhanden war.
- Sie müssen Ihre Antworten erst veröffentlichen, nachdem diese Aufforderung veröffentlicht wurde.
- Sie müssen eine Sprache verwenden, die vor dem Posten Ihrer Antwort vorhanden war.
- Sie können Ihre Antwort erst bearbeiten, nachdem Sie sie veröffentlicht haben.
- Ihr Programm darf nur die gewünschte Ausgabe ausgeben. Ein gelegentlicher "Great Scott!" ist erlaubt.
Das ist Code-Golf. Die kürzeste Antwort gewinnt.
Relevante Filmreferenzen werden Ihre Antwort wahrscheinlich zu lang machen, aber Ihnen möglicherweise positive Stimmen einbringen.
Antworten:
CJam, 118 Bytes
Dies funktioniert nicht mit dem Online-Dolmetscher.
Beispielausgabe nach zweimaliger Einstellung der Computerzeit:
quelle
Python 2, 210 Bytes
Zeitstempel werden im
YYYY-MM-DD HH:MM:SS
Format gedruckt und durch Semikolons getrennt. Wurde von 3 auf Python 2 umgestellt, da der Ausdruck 2 Zeichen kürzer ist. Spam-Mails sindGreat Scott!
für Nicht-Zeitreisendenormal, da dies einfacher und billiger ist als das Einrichten eines bedingten Ausdrucks.quelle
JavaScript (ES6), 263 Byte
Dies könnte wahrscheinlich mit einigem Umschreiben zu tun haben, um es effizienter / kleiner zu machen.
Quelle:
quelle
now()
Anrufe kann es auch vorkommen, dass ein Reiseereignis versäumt wird.o=(n=Date).now()
.8.64e+7
ist zwei Zeichen länger als86400
.Python 3, 195
Derzeit druckt Great Scott nicht, weil ich keine gute Möglichkeit finde, es nur gelegentlich zu machen.
quelle
Bash + Coreutils, 177
quelle
Ruby, 194 Bytes
Ich hatte noch nicht die Zeit, das wirklich auf die richtige Größe zu bringen. Ich bin mir sicher, dass sich dort ein paar Optimierungen verstecken.
Ungolfed (und viel besser lesbar):
Bearbeiten: Korrigiert, um das Betriebssystem nach Zeit zu fragen, anstatt nach einem Menschen.
quelle
loop{}
anstelle vonwhile 1...end
und versuchen Sie,+
Zeichenfolgen anstelle von Interpolation zu verketten.Lua 5,3, 174 Bytes
Dies spielt stark von der Regel "Zeitstempel können in jedem Format sein" ab ... Ich
habe mir erlaubt , das Format "Sekunden seit dem 1. Januar 1970" zu verwenden, wenn ich meine schlechte Interpretation des Druckens von Zeitstempeln behalte und die Zeitstempel übernehme Struktur von MeepDarknessMeep, ich kann dies (unethisch) quetschen, um ...
155 Bytes
quelle
Timestamps may be in any format, that includes at least the 4-digit year, month, day, hour, minute and second, separated by non-digits.
- Das erlaubt keine Sekunden seit der Epoche.Back in good ol YYYY
, als würde es gedruckt, aber es sollte gedruckt werdenBack in good old YYYY
. (Beachten Sie das d in alt)Lua 5.3,
179178173171169168163 BytesRandnotiz: Wenn Sie die Notwendigkeit für eine ganze Jahreszahl herausnehmen, dann subtrahieren Sie sechs Bytes. Der Grund ist, dass% c von lua (oder Windows oder jemandem!) Nicht das ganze Jahr ausgibt. Aus diesem Grund können die Zeitstempel seltsam aussehen!
Dies nutzt auch den Vorteil, dass Zeitstempel durch nicht-stellige Zeichen getrennt werden können!
Vielen Dank, dass Sie mich über meine alte math.abs-Referenz und andere Verbesserungen unter @thenumbernine informiert haben :)
Lua 5,3, 151 Bytes
Dies ist das "Kopieren" der @ thenumbernine-Methode zum Anzeigen der Zeit, indem nur der Zeitstempel anstelle des tatsächlichen Datums angezeigt wird. Dies ist nicht wettbewerbsfähig, da ich denke, dass es ein bisschen Schummeln ist. Posten Sie es einfach hier, um meine Arbeit anzuzeigen :)
quelle
C: 363 Bytes
Mit diesem praktischen Skript minimiert :
Original:
Beispiellauf:
Ich könnte 10 Bytes loswerden, indem
sleep
ich das entferne, schätze ich.Übrigens ein wenig Zeitsprung für Mac / Linux:
quelle
sleep
.JavaScript (ES6)
181174170 BytesHinweis: Wurde nicht mit einer Echtzeitmaschine getestet.
Dieser Code läuft in Firefox, Chrome, Edge, Node.js Harmony (oder io.js für diese Angelegenheit). Aber ich benutze
alert
, so dassconsole.log
für Node und Io Suport ersetzt werden muss: (187 Bytes)Erklärt:
quelle
Python,
170165 BytesDies ist Morgan Thrapps Antwort zu verdanken. Der Haupttrick hierbei ist die Zeitdelta-Normalisierung, die zeitdelta.days praktisch negativ macht, wenn sie sich nur geringfügig in die Vergangenheit bewegt, und 0, wenn sie sich weniger als einen Tag in die Zukunft bewegt.
quelle
import*
Sie dasdatetime.
Präfix nicht brauchen .import*
Ermöglicht das Schreibendatetime.now()
anstelle vondatetime.datetime.now()
. In gewisser Weise macht es irgendwie Sinn ...Caché ObjectScript, 199 Byte
Dieses Problem ist in einfachen alten MUMPS lösbar, wäre aber unangemessen langwierig, da ANSI MUMPS die eigentliche
$ZD[ATE]T[IME]
Funktion zum Formatieren von Datumsangaben in für Menschen lesbare Zeitstempel fehlt .Dieses Programm erkennt wahrscheinlich weder Zeitreisen vor dem 1. Januar 1841 noch Zeitreisen nach dem 31. Dezember 9999, da dies die Grenzen der eigentlichen
$H[OROLOG]
Zeitmessung sind . Dieses Programm hat auch nur eine Genauigkeit der zweiten Ebene; Zeitstörungen im Sub-Second-Level nach hinten werden wahrscheinlich nicht bemerkt.quelle
TSQL, 355 Bytes
Bei der Arbeit bleiben also keine ausgefallenen coolen Sprachen bei deinem SQL Server-Produktionsserver =)
Golf Version
Mehr lesbare Version mit kleinen Änderungen.
SQL ist in Bezug auf Zeitstempel nicht so schlecht, da es sich um einen erstklassigen Datentyp handelt.
Für den Golfsport verwenden wir einen Typ mit einer Genauigkeit von 3 Millisekunden. Die Schleife selbst benötigt weniger Zeit zum Durchlaufen (abhängig von Ihrem Server). Der Schlüssel hier ist intern, dass der Zeitstempel ein Gleitkomma ist und der Integer-Typ zählt, wie viele Tage vergangen sind. Es funktioniert vom 1. Januar 1753 bis zum 31. Dezember 9999 problemlos.
quelle
VBA, 258 Bytes
Lief mit: Excel 2007 in Windows 7
305 Bytes, wenn Benutzerfreundlichkeit erforderlich ist
Wenn Sie möchten, dass dieser Code "testbar" ist, fügen Sie
Application.Wait (Now() + TimeValue("0:00:01"))
nachh=t
Ausgabe
Unten ist die Testdatei, die ich verwendet habe. Ich bin ehrlich erstaunt darüber, wie wenig Sicherheit Windows manchmal bietet. Läuft möglicherweise nicht auf allen Computern wie erwartet
quelle
Javascript
173 169162 BytesJavascript ist ziemlich beliebt ...
Erklärung (ältere Version des Codes):
quelle
Verarbeitung 270 Byte
Erweitert:
Beispielausgabe:
quelle
Ruby,
160157155154 BytesHier gibt es viel zu golfen
quelle
Mathematica, 295 Bytes
Das Programm fragt das Betriebssystem jede Sekunde nach neuen TS.
Ausgabe
Geprüft durch manuelle Eingabe von Datum / Uhrzeit.
Hätte definitiv die Ausgabe besser formatieren können. Es erfüllt die angegebenen Anforderungen.
quelle
LocalTime[]
? Es erscheint nur einmal im folgenden Code.Groovy, 244 Bytes
quelle
Java, 378 Bytes.
quelle