Eu tenho um velho despertador estúpido com dois botões: houre minute. O hourbotão incrementa a hora de um alarme definido e minuteaumenta a hora em minutos de um alarme definido. No entanto, alguns designers inteligentes perceberam que pressionar os dois botões ao mesmo tempo deveria ter um significado e decidiram que pressionar houre minutesimultaneamente faria com que o alarme fosse definido como 12:00 am/ 0:00. Sua tarefa é simular esse comportamento.
Tarefa
Dada a hora de início e uma sequência de estados dos botões, calcule a hora de término.
A partir da hora de início, aumente a hora para cada ocorrência de (1,0), aumente o minuto para cada ocorrência de (0,1)e defina a hora 0:00para cada ocorrência de (1,1). Os estados (0,0)devem ser ignorados porque correspondem a nenhum botão sendo pressionado.
Ao adicionar minutos e horas, se o minuto / hora ultrapassar o máximo, defina-o como 0, isto é, incrementar um valor minuto de 59deve definir o valor minuto 0e incrementar um valor de hora 23deve definir o valor da hora 0. Incrementar valores de minuto / hora acima de seus limites não afeta o outro valor, por exemplo, incrementar o minuto de 10:59rendimentos 10:00, não 11:00.
Exemplo
Dado o tempo de entrada 13:58e as etapas [(0,1),(0,1),(0,1),(0,0),(1,1),(1,0)],
(0,1). Isso corresponde a minuteser pressionado. A hora é agora13:59.(0,1). Isso corresponde a minuteser pressionado. A hora é agora13:00.(0,1). Isso corresponde a minuteser pressionado. A hora é agora13:01.(0,0). Isso corresponde a nenhum botão sendo pressionado. A hora, não afetada, é agora13:01(1,1). Isso corresponde aos dois botões sendo pressionados. A hora é agora0:00.(1,0)Isso corresponde a hourser pressionado. A hora é agora1:00.
Desde que terminamos 1:00, é a saída.
I / O
A entrada consistirá em um tempo e uma sequência de estados dos botões. A saída é uma única vez.
O tempo de entrada e o tempo de saída podem ser
- uma tupla de duas horas
(hour, minute)ou(minute, hour)em um24horário, como(13, 30)(hourvaria de0a23eminutevaria de0a59) - igual ao tempo anterior, mas em uma
12hora, e um interruptor booleanoam/pm(hourvaria de0para11ou para12e com de para ).111minute059 - alguns minutos desde
0:00810 (de 0 a 1439, inclusive) - qualquer outro formato que codifique a mesma informação
A sequência dos estados dos botões é uma representação de uma lista de 2 tuplas booleanas, por exemplo:
- uma lista de tuplas:
[(0,1),(1,0),(0,0),(1,1)] - uma sequência delimitada por espaço:
"01 10 00 11" - uma linha:
"01100011" - em Quaternário:
[1,2,0,3] - convertido em um número inteiro:
99 - qualquer outro formato que codifique a mesma informação
Casos de teste
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
[[initialHour, initialMinute], [hourPressed1, minuitePressed1], [hourPressed2, minuitePressed2], ...]?