Mam głupi stary budzik z dwoma przyciskami: houri minute. ThehourPrzycisku zwiększa godzinę zestawu alarmu, a minuteprzyrosty czasu minutowego zestawu alarmu. Jednak niektóre inteligentne projektanci sobie sprawę, że naciśnięcie obu przycisków jednocześnie powinno mieć znaczenia, i zdecydował, że naciśnięcie houri minutejednocześnie spowodowałoby alarm ma być ustawiony na 12:00 am
/ 0:00
. Twoim zadaniem jest symulacja tego zachowania.
Zadanie
Biorąc pod uwagę czas rozpoczęcia i sekwencję stanów przycisków, określ czas zakończenia.
Począwszy od godziny rozpoczęcia, zwiększ godzinę dla każdego wystąpienia (1,0)
, zwiększ minutę dla każdego wystąpienia (0,1)
i ustaw czas na0:00
dla każdego wystąpienia (1,1)
. Stany (0,0)
należy zignorować, ponieważ odpowiadają one naciśnięciu żadnego przycisku.
Przy dodawaniu do minut i godzin, jeśli minuta / godzina przekracza maksimum, ustaw ją na 0
, tzn. Zwiększając wartość minuty, 59
należy ustawić wartość minuty na, 0
a zwiększając wartość godziny, 23
należy ustawić wartość godziny na 0
. Zwiększanie wartości minut / godzina powyżej ich granic nie mają wpływu na inne wartości, na przykład zwiększając minutę 10:59
wydajności 10:00
nie 11:00
.
Przykład
Biorąc pod uwagę czas 13:58
i kroki wejściowe [(0,1),(0,1),(0,1),(0,0),(1,1),(1,0)]
,
(0,1)
. To odpowiada minutenaciśnięciu. Czas jest teraz13:59
.(0,1)
. To odpowiada minutenaciśnięciu. Czas jest teraz13:00
.(0,1)
. To odpowiada minutenaciśnięciu. Czas jest teraz13:01
.(0,0)
. Odpowiada to naciśnięciu żadnego przycisku. Czas, bez zmian, jest teraz13:01
(1,1)
. Odpowiada to naciśnięciu obu przycisków. Czas jest teraz0:00
.(1,0)
To odpowiada hournaciśnięciu. Czas jest teraz1:00
.
Ponieważ kończymy 1:00
, jest to wynik.
I / O
Dane wejściowe będą składały się z czasu i sekwencji stanów przycisków. Wyjście jest jednorazowe.
Czas wejściowy i czas wyjściowy mogą być
- 2-krotnym
(hour, minute)
lub(minute, hour)
w24
godzinny czas, takich jak(13, 30)
(hour
waha się od0
celu23
iminute
waha się od0
się59
) - taki sam jak poprzedni, lecz w
12
godzinny czas i logicznaam
/pm
wyłącznik (hour
w zakresie od0
do11
lub12
i1
do11
zminute
z0
z59
). - liczba minut od
0:00
takich jak 810 (od 0 do 1439 włącznie) - każdy inny format, który koduje te same informacje
Sekwencja stanów przycisków jest reprezentacją listy logicznych 2-krotek, na przykład:
- lista krotek:
[(0,1),(1,0),(0,0),(1,1)]
- ciąg rozdzielany spacjami:
"01 10 00 11"
- ciąg:
"01100011"
- w czwartorzędu:
[1,2,0,3]
- przekonwertowane na liczbę całkowitą:
99
- każdy inny format, który koduje te same informacje
Przypadki testowe
time,steps -> output
06:49,[(0, 1)] -> 06:50
12:23,[(1, 0)] -> 13:23
02:23,[(0, 1), (1, 0)] -> 03:24
21:40,[(0, 1), (0, 1), (0, 1), (0, 1)] -> 21:44
13:10,[(0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (1, 1), (0, 1), (0, 1)] -> 00:02
21:33,[(1, 0), (0, 1), (1, 0), (0, 1)] -> 23:35
14:21,[(0, 1), (0, 1), (0, 1)] -> 14:24
02:39,[(0, 0), (0, 1)] -> 02:40
16:07,[(0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1)] -> 19:16
17:55,[(0, 1), (1, 0), (0, 1)] -> 18:57
15:55,[(1, 0), (1, 0), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (1, 0), (1, 0), (0, 1), (1, 0)] -> 23:00
22:11,[(0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1)] -> 00:19
03:58,[(1, 0), (0, 0), (0, 0), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (1, 0), (0, 1)] -> 07:03
13:02,[(0, 1), (1, 0), (0, 1), (1, 0), (0, 1), (0, 1), (1, 0)] -> 16:06
04:37,[(1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (1, 0), (0, 1), (1, 0)] -> 08:47
00:01,[(0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1)] -> 03:08
02:58,[(1, 0), (1, 0), (0, 1)] -> 04:59
01:43,[(0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (1, 0), (0, 1)] -> 04:52
07:54,[(1, 0), (0, 1), (1, 0), (1, 0), (1, 1)] -> 00:00
09:33,[(0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1)] -> 10:38
09:01,[(0, 1), (0, 1)] -> 09:03
19:04,[(0, 1), (1, 0), (0, 1), (1, 0)] -> 21:06
11:17,[(0, 1), (1, 0), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (1, 1), (0, 1), (0, 1)] -> 00:02
19:32,[(0, 1), (1, 0), (0, 1), (1, 0), (1, 0), (1, 0)] -> 23:34
17:31,[(0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (1, 0), (0, 1), (0, 0), (1, 1), (0, 1)] -> 00:01
06:46,[(0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (1, 0), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1)] -> 18:16
[h, m]
formacie z krokami czwartorzędowymi .[[initialHour, initialMinute], [hourPressed1, minuitePressed1], [hourPressed2, minuitePressed2], ...]
?Odpowiedzi:
Galaretka , 13 bajtów
Wypróbuj online!
źródło
C,
8987 bajtówDzięki @Jonathan Frech za uratowanie dwóch bajtów!
Wypróbuj online!
źródło
Galaretka ,
21 lat(17?) 19 bajtów17 bajtów? - Jeśli format wejściowy:
[[initHour, initMinute], [a1, b1], [a2, b2], ...]
jest akceptowalny, mamy link monadyczny i możemy go usunąćW;
z początku drugiej linii.Uwaga: To jest teraz zbieżne w kierunku odpowiedzi Galaretki Outgolfersów , więc nie będę więcej zawracał sobie głowy golfem (nie widziałem tego) ...
Dynamiczny link przyjmujący listę czasu początkowego jako liczby całkowite
[hour, minute]
(24-godzinne) po lewej stronie oraz listę stanów przycisków[[hourPressed, minPressed], ...]
po prawej stronie,która zwraca listę czasu wyniku końcowego jako liczby całkowite, ponownie
[hour, minute]
(24-godzinne).Wypróbuj online! lub zobacz zestaw testowy
W jaki sposób?
źródło
⁹Ạ¤
wẠ}
. Kolejne -2 za użycie dozwolonego formatu. Wreszcie kolejny -1, ponieważ łańcuch przedµ
tutaj nazywa się diadem.Python 2 ,
8475 bajtówWypróbuj online!
Funkcja, która zajmuje czas jako krotkę (godzina, minuta); wyjścia w ten sam sposób.
źródło
all(b)
zamiastb[0]&b[1]
:lambda c,a:reduce(lambda t,b:all(b)and((t[0]+b[0])%24,(t[1]+b[1])%60)or(0,0),a,c)
lambda(h,m),(d,e):
czy ten wzór pasuje do Pythona !?Siatkówka , 75 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Usuń wszystko aż do ostatniego podwójnego naciśnięcia przycisku, zastępując go pustym czasem (w przypadku, gdy jest to ostatnie naciśnięcie przycisku).
Konwertuj na unary.
Posortuj minuty do końca.
Dodaj godziny razem.
Dodaj minuty do siebie, ale oddziel godziny.
Zmniejsz odpowiednio godziny i minuty modulo 24 lub 60.
Konwertuj na dziesiętny.
Sformatuj do dwóch cyfr.
źródło
Python 3,
135117115 bajtów-20 bajtów dzięki Jonathanowi Frechowi
Wypróbuj online!
Poświęca czas jako listę w formularzu
[hour, minute]
.źródło
(m[0]+1)
z-~m[0]
iif m[0]<23 else 0
z*(m[0]<23)
.b
ic
zawsze są wartości logiczne, można zastąpićb+c>1
zb&c
.Haskell , 58 bajtów
Wypróbuj online! Przykładowe zastosowania:
foldl(#) (23,58) [(0,1),(1,0),(0,0),(0,1),(0,1)]
.źródło
JavaScript (ES6), 55 bajtów
Pobiera dane wejściowe w składni curry, z czasem rozpoczęcia w postaci tablicy
[min, hour]
a kroki jako tablicą czwartorzędową. Czas wyjściowy ma taki sam format jak czas wejściowy.Przypadki testowe
Pokaż fragment kodu
źródło
Perl 6 , 40 bajtów
Wypróbuj online!
Pobiera listę zawierającą czas rozpoczęcia, a następnie naciśnięcia przycisków. Zwraca czas zakończenia. Czasy i przyciski są
(hour, minute)
parami. 24 godziny.źródło
Perl 5 , 70 bajtów
69 bajtów kodu + 1 dla
-n
flagiWypróbuj online!
Format wejściowy
hh:mm,abcdabcdabcdaddccbbaa
gdzie:
Odstępy lub inne separatory między prasami są nieznaczne.
Wyjaśnienie
źródło
Szybki ,
10696 bajtów-10, dzięki Xcoder
Wypróbuj na ideone!
funkcja pobierze wartość początkową i tablicę krotek i zwróci czas końcowy.
źródło
func x(m:(Int,Int),n:[(Int,Int)]){let i=n.reduce(m){($0.0+$1.0,$0.1+$1.1)};print(i.0%24,i.1%60)}
. To się też pozbywatypealias
.Logo Terrapin, 304 bajty
Niezoptymalizowany; dużo przestrzeni.
Pobiera listę jako swoje pierwsze wejście, a godzinę początkową + minuty (osobne dane wejściowe) odpowiednio jako drugie i trzecie.
Nie mogę skopiować + wkleić z Terrapin Logo, ponieważ jest to wersja próbna, więc to :(
źródło
R , 61 bajtów
Staje się
I
jako długości 2 wektorc(H,M)
iB
jako lista długości 2 wektorów dla przyciskówc(H,M)
. IteracjiB
, ustawianieI
sięc(0,0)
, jeśli suma jest2
. Następnie na końcu zmniejsza się. W nagłówku znajduje się również funkcja, która tłumaczy naciśnięcia przycisków na właściwy format R, jeśli chcesz je wszystkie przetestować; przyjmuje tablicę[(H,M),...]
jako ciąg.Wypróbuj online!
źródło
C # (.NET Core) , 93 bajty
Wypróbuj online!
Pobiera dane wejściowe jak w trybie trójkowym, gdzie 0 == (1,0), 1 == (0,1), 2 == (1,1), a czas w tablicy o indeksie 0 oznacza godziny, a 1 oznacza minuty. Zmienia tablicę czasu na miejscu.
źródło
Pyth, 22 bajty
Wypróbuj tutaj.
źródło
Mathematica, 54 bajty
Funkcja anonimowa. Pobiera listę 2-krotek jako dane wejściowe i zwraca 2-krotkę jako dane wyjściowe.
źródło
Scala , 116 bajtów
Tak więc traktuję czas rozpoczęcia jako dwa pierwsze parametry mojego func (
h
im
), a sekwencję wejściową traktuję jako macierz [Tuple2].Zastanawiam się ... czy powinienem policzyć deklarację func (
def time(h:Int,m:Int,a:Array[Tuple2[Int,Int]]):Tuple2[Int,Int]={
plus końcówkę}
) w liczbie bajtów?Wypróbuj online!
źródło