Wyzwanie
Biorąc pod uwagę czas i strefę czasową jako dane wejściowe, wyświetlaj czas w tej strefie czasowej.
Czas
Czas zostanie podany w formacie 24-godzinnym tak:
hh:mm
Gdzie hh to dwucyfrowa godzina, a mm to dwucyfrowa minuta. Zauważ, że godzina i minuta zawsze będą wypełnione zerami w następujący sposób:
06:09
Wszystkie podane godziny są w UTC + 00: 00.
Godziny na wyjściu nie muszą być uzupełnione zerami, ale twój czas musi być w formacie 24-godzinnym
Strefa czasowa
Strefa czasowa zostanie podana w następującym formacie:
UTC±hh:mm
Gdzie ± będzie albo +, albo - i hh, jest dwucyfrową godziną, a mm jest dwucyfrową minutą (ponownie, będą one uzupełnione zerami).
Aby znaleźć czas w tej strefie czasowej, możesz dodać (jeśli symbolem jest +) lub odjąć (jeśli symbolem jest -) czas po UTC ± od wprowadzonego czasu.
Na przykład, jeśli dane wejściowe były 24:56
i UTC-02:50
, odejmowałbyś 2 godziny i 50 minut od 24:56:
24:56
02:50 -
-----
22:06
Wynik byłby 22:06
.
Przykłady
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
Hawaje
Input: 02:40 and UTC-10:00
Output: 16:40
Pamiętaj, że poszło to do poprzedniego dnia.
Tokio
Input: 17:25 and UTC+09:00
Output: 02:25
Pamiętaj, że poszło to następnego dnia.
Zasady
Nie wolno używać żadnych wbudowanych funkcji daty ani bibliotek.
Załóż, że wszystkie dane wejściowe będą prawidłowe i przesunięcia czasowe.
Strefa czasowa będzie w zakresie UTC-24:00
od UTC+24:00
włącznie.
W przypadku wpół do północy , prawidłowa reprezentacja powinna być 00:30
, nie 24:30
.
Zwycięski
Najkrótszy kod w bajtach wygrywa.
26:02
I08:74
nie pojawiłby się? To samo dotyczy przesunięć UTC?2:25
1:5
byłby prawidłowy zamiast1:05
? Sądzę, że nie należy podchodzić tylko godzin. Twój przykład24:56
nie powinien tak być,00:56
ponieważ określiłeś zakres do24:00
i wyrażasz podobny w swoim scenariuszu o północy po północy?Odpowiedzi:
APL (Dyalog APL) , 45 bajtów
Wyrażenie
Bierze dwa ciągi jako właściwy argument.
Wypróbuj online!
Wyjaśnienie
24 60⊤
konwersja liczby na bazę a 24 b 60∘
z⍎
ewaluacja∘
z⍕
sformatowany (tzn. spłaszczony spacjami)('+-'∩⍕)
przecięcie „+ -” i sformatowanego wejścia (wyodrębnia plus lub minus),
śledzony przez(
...)¨
następujące dla każdego wejścia (czas i przesunięcie)0 60⊥
∞ b 60 -to-liczby konwersji2⊃
drugi element':'⎕VFI
The, stosując okrężnicy jako separator pola, V erified i F ixed że informacje wejściowe z¯5∘↑
pięć ostatnich znaków („gg: mm”)Krok po kroku w „17:25” i „UTC + 09: 00”
Wyrażenie po lewej stronie danych po prawej stronie podaje dane następnego wiersza.
źródło
C, 109 bajtów
Wywołaj w następujący sposób:
źródło
UTC-03:30
?JavaScript (ES6), 101 bajtów
Byłbym 121 bajtów, gdybym uzupełniał godziny.
źródło
Python 2, 129 bajtów
Zadzwoń jako
T("02:45", "UTC-05:33")
źródło
;
.Python 2, 84 bajtów
Wszystkie przypadki testowe są w ideone
Format wyjściowy jest oddzielony spacją, bez zer wiodących.
źródło
Java 201 bajtów
Nazywany jako T („12:00”, „UTC + 02: 40”)
Nieprzyzwyczajony do logiki,
Będziemy wdzięczni za każdą pomoc, aby uzyskać mniej niż 200!
źródło
Integer i=1;
i zamień wszystkie pozostałeInteger
nai
, więc maszi.valueOf
zamiastInteger.valueOf
.14:27
zamiast15:27
.java.util.function.Function v=Integer::valueOf
. Nie jestem pewien, czy to naprawdę dużo zaoszczędziłoby.Rubinowy, 95 bajtów
Stosowanie
Wejścia (przykład)
źródło
JavaScript (ES6),
9392 bajtyPrzypadki testowe
źródło
Jawa
156150149147142 bajtyWalizki testowe i bez golfa
Wióry
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:]","")
źródło
C #
214205183 bajtówWersja 205 bajtów
Nie golfił
Oryginał 214:
źródło
CJam , 40 bajtów
Wypróbuj online! (Jako zestaw testowy.)
Wyjaśnienie
źródło
Siatkówka , 100 bajtów
Wypróbuj online!
Wyjaśnienie
Zastępuje każdy
:
z 59 z nich i przecinek jako separator.Wielokrotnie duplikuje liczbę przed znakiem
:
. Pierwsze dwa etapy mnożą wartość godzinną przez 60.Konwertuj każdą liczbę na jednoargumentową.
Jeśli na wejściu znajduje się znak minus, to ten etap transliteracji zamienia wszystkie
1
s po nim na0
s. Zasadniczo używamy tutaj0
jako jednoznacznej-1
cyfry.Wstaw 1440
1
s (tzn. Cały dzień). Ma to na celu zapewnienie, że czas nie będzie ujemny.Powoduje to wielokrotne usuwanie wszystkich cyfr (tj. Spacji, the
UTC
,+
lub-
, a także wszystkich,
wstawionych przez nas10
znaków ) i kombinacji, tym samym anulując cyfry dodatnie i ujemne. To zasadniczo odejmuje drugą liczbę od pierwszej, jeśli jest ujemna, lub dodaje ją w inny sposób.Usuwa 1440
1
s, jeśli to możliwe (w zasadzie biorąc wynik modulo 1440, aby dopasować go do jednego 24 godzin).Rozłóż liczbę na godziny i minuty, dopasowując jak najwięcej fragmentów 60 cyfr (licząc fragmenty
$#1
), a następnie pozostałe cyfry (których długość jest liczona$.2
).Jeśli w wyniku są jakieś pojedyncze cyfry, wstaw zero.
źródło