Herausforderung
Geben Sie die Zeit in dieser Zeitzone aus, wenn Sie eine Zeit und eine Zeitzone als Eingabe angegeben haben.
Zeit
Die Uhrzeit wird im 24-Stunden-Format wie folgt angegeben:
hh:mm
Dabei ist hh die zweistellige Stunde und mm die zweistellige Minute. Beachten Sie, dass Stunde und Minute immer mit Nullen wie folgt aufgefüllt werden:
06:09
Alle angegebenen Zeiten sind um UTC + 00: 00.
Die Stunden in Ihrer Ausgabe müssen nicht mit Nullen aufgefüllt werden, sondern Ihre Zeit muss im 24-Stunden-Format vorliegen
Zeitzone
Die Zeitzone wird im folgenden Format angegeben:
UTC±hh:mm
Wobei ± entweder ein + oder ein - ist und hh die zweistellige Stunde und mm die zweistellige Minute (diese werden wiederum mit Nullen aufgefüllt).
Um die Zeit in dieser Zeitzone zu ermitteln, müssen Sie entweder die Zeit nach UTC ± von der eingegebenen Zeit addieren (wenn das Symbol + ist) oder subtrahieren (wenn das Symbol - ist).
Wenn die Eingabe beispielsweise 24:56
und wäre UTC-02:50
, würden Sie 2 Stunden und 50 Minuten von 24:56 subtrahieren:
24:56
02:50 -
-----
22:06
Die Ausgabe wäre 22:06
.
Beispiele
Chicago
Input: 08:50 and UTC-06:00
Output: 02:50
Kathmandu
Input: 09:42 and UTC+05:45
Output: 15:27
Samoa
Input: 06:42 and UTC+13:00
Output: 19:42
Hawaii
Input: 02:40 and UTC-10:00
Output: 16:40
Beachten Sie, dass dies zum vorherigen Tag gegangen ist.
Tokyo
Input: 17:25 and UTC+09:00
Output: 02:25
Beachten Sie, dass dies bis zum folgenden Tag gegangen ist.
Regeln
Sie dürfen keine eingebauten Datumsfunktionen oder Bibliotheken verwenden.
Angenommen, alle Eingaben sind gültige Zeiten und Zeitversätze.
Die Zeitzone liegt im Bereich UTC-24:00
bis UTC+24:00
einschließlich.
Im Fall der halb Mitternacht sollte die korrekte Darstellung sein 00:30
, nicht 24:30
.
Gewinnen
Der kürzeste Code in Bytes gewinnt.
26:02
und08:74
würde nicht erscheinen? Gleiches für die UTC-Offsets?2:25
1:5
werden muss, ist stattdessen eine Zeit wie gültig1:05
? Ich würde denken, nur die Stunden sollten nicht aufgefüllt werden. Auch dein Beispiel mit24:56
sollte das nicht sein,00:56
da du24:00
in deinem halb eins Mitternachtsszenario einen Bereich angegeben und ähnlich ausgedrückt hast?Antworten:
APL (Dyalog APL) , 45 Bytes
Ausdruck
Nimmt zwei Zeichenketten als rechtes Argument.
Probieren Sie es online!
Erläuterung
24 60⊤
die Zahl-zu-Basis- a 24 b 60 -Umwandlung∘
von⍎
die Evaluation∘
von⍕
die formatiert (dh mit Trennzeichen abgeflacht)('+-'∩⍕)
Schnittpunkt von "+ -" und formatierter Eingabe (dies extrahiert das Plus oder Minus),
gefolgt von(
...)¨
das Folgende für jeden der Eingänge (die Zeit und den Versatz)0 60⊥
die a ∞ b 60- zu-Zahl-Umwandlung von2⊃
das zweite Element von':'⎕VFI
die, Kolon als Feldtrennzeichen , V erified und F ixed I Nput von¯5∘↑
die letzten fünf Zeichen ("hh: mm")Schritt für Schritt zu "17:25" und "UTC + 09: 00"
Der linke Ausdruck auf der rechten Seite gibt die Daten der nächsten Zeile an.
quelle
C 109 Bytes
Rufen Sie wie folgt auf:
quelle
UTC-03:30
?JavaScript (ES6), 101 Byte
Wäre 121 Bytes, wenn ich die Stunden auffüllen würde.
quelle
Python 2, 129 Bytes
Anrufen als
T("02:45", "UTC-05:33")
quelle
;
.Python 2, 84 Bytes
Alle Testfälle sind auf ideone
Das Ausgabeformat ist durch Leerzeichen ohne führende Nullen getrennt.
quelle
Java 201 Bytes
Aufgerufen als T ("12:00", "UTC + 02: 40")
Unglolfed für die Logik,
Jede Hilfe, um es unter 200 zu bekommen, wäre dankbar!
quelle
Integer i=1;
und ersetzen Sie alle anderenInteger
durchi
, so dass Siei.valueOf
stattdessen habenInteger.valueOf
.14:27
statt aus15:27
.java.util.function.Function v=Integer::valueOf
. Ich bin mir nicht sicher, ob das wirklich viel spart.Ruby, 95 Bytes
Verwendung
Eingänge (Beispiel)
quelle
Javascript (ES6),
93 bis92 BytesTestfälle
quelle
Java
156150149147142 BytesTestfälle & ungolfed
Rasuren
a/H*60+b/H*60
->(a/H+b/H)*60
(T/H+Z/H)*60+1440
->(T/H+Z/H+24)*60
.z.replace(":","").substring(3)
->z.replaceAll("[UTC:]","")
quelle
C #
214205183 Bytes205-Byte-Version
Ungolfed
Original 214:
quelle
CJam , 40 Bytes
Probieren Sie es online!(Als Testsuite.)
Erläuterung
quelle
Retina , 100 Bytes
Probieren Sie es online!
Erläuterung
Ersetzt jeweils
:
durch 59 und ein Komma als Trennzeichen.Wiederholt die Nummer vor a
:
. Die ersten beiden Stufen multiplizieren also den Stundenwert mit 60.Wandle jede Zahl in eine unäre um.
Befindet sich ein Minuszeichen in der Eingabe, verwandelt diese Transliterationsstufe alle
1
nachfolgenden s in0
s. Wir verwenden hier im Grunde genommen0
eine unäre-1
Ziffer.Geben Sie 1440
1
s ein (dh einen ganzen Tag). Dies soll sicherstellen, dass die Zeit nicht negativ wird.Dadurch werden wiederholt alle Nicht-Ziffern (dh das Leerzeichen, das
UTC
, das+
oder-
sowie alles, was,
wir eingefügt haben) und die10
Kombination entfernt, wodurch positive und negative Ziffern gelöscht werden. Dies subtrahiert im Grunde genommen die zweite Zahl von der ersten, wenn sie negativ ist, oder addiert sie auf andere Weise.Entfernt
1
nach Möglichkeit 1440 s (im Grunde genommen wird das Ergebnis modulo 1440 für eine 24-Stunden-Anpassung herangezogen).Zerlegen Sie die Zahl in Stunden und Minuten, indem Sie so viele 60-stellige Blöcke wie möglich zuordnen (wobei die Blöcke mit gezählt werden
$#1
), gefolgt von den verbleibenden Ziffern (deren Länge mit gezählt wird$.2
).Wenn das Ergebnis einzelne Ziffern enthält, stellen Sie eine Null voran.
quelle