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:00
para 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 59
deve definir o valor minuto 0
e incrementar um valor de hora 23
deve 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:59
rendimentos 10:00
, não 11:00
.
Exemplo
Dado o tempo de entrada 13:58
e 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 um24
horário, como(13, 30)
(hour
varia de0
a23
eminute
varia de0
a59
) - igual ao tempo anterior, mas em uma
12
hora, e um interruptor booleanoam
/pm
(hour
varia de0
para11
ou para12
e com de para ).1
11
minute
0
59
- alguns minutos desde
0:00
810 (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
[h, m]
formato com etapas quaternárias .[[initialHour, initialMinute], [hourPressed1, minuitePressed1], [hourPressed2, minuitePressed2], ...]
?Respostas:
Gelatina , 13 bytes
Experimente online!
fonte
C,
8987 bytesAgradecemos a Jonathan Frech por salvar dois bytes!
Experimente online!
fonte
Gelatina ,
21(17?) 19 bytes17 bytes? - Se o formato de entrada:
[[initHour, initMinute], [a1, b1], [a2, b2], ...]
for aceitável, teríamos um link monádico e poderemos removerW;
do início da segunda linha.Nota: Isso agora está convergindo para a resposta da Erik the Outgolfers Jelly , por isso não vou me preocupar mais em jogar golfe (eu não a tinha visto) ...
Um link diádico que obtém uma lista da hora inicial como números inteiros
[hour, minute]
(24 horas) à esquerda e uma lista de estados de botão[[hourPressed, minPressed], ...]
à direitaque retorna uma lista da hora do resultado final como números inteiros, novamente
[hour, minute]
(24 horas).Experimente online! ou veja a suíte de testes
Quão?
fonte
⁹Ạ¤
porẠ}
. Outro -2 para usar um formato permitido. Finalmente, um outro -1 porque a cadeia a antesµ
aqui é chamado como uma díade ..Python 2 ,
8475 bytesExperimente online!
Função que leva tempo como uma tupla (hora, minuto); saídas da mesma maneira.
fonte
all(b)
vez deb[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):
esse padrão está em Python !?Retina , 75 bytes
Experimente online! O link inclui casos de teste. Explicação:
Exclua tudo, inclusive o último pressionamento do botão duplo, substituindo-o por um tempo vazio (caso esse seja o último pressionamento do botão).
Converta para unário.
Ordene os minutos até o fim.
Adicione as horas juntos.
Adicione os minutos, mas mantenha as horas separadas.
Reduza as horas e minutos do módulo 24 ou 60, conforme apropriado.
Converta para decimal.
Formate para dois dígitos.
fonte
Python 3,
135117115 bytes-20 bytes graças a Jonathan Frech
Experimente online!
Leva o tempo como uma lista no formulário
[hour, minute]
.fonte
(m[0]+1)
por-~m[0]
eif m[0]<23 else 0
com*(m[0]<23)
.b
ec
sempre são valores booleanos, você pode substituirb+c>1
porb&c
.Haskell , 58 bytes
Experimente online! Exemplo de utilização:
foldl(#) (23,58) [(0,1),(1,0),(0,0),(0,1),(0,1)]
.fonte
JavaScript (ES6), 55 bytes
Recebe entrada na sintaxe de curry, com o horário de início no formato da matriz
[min, hour]
e as etapas como uma matriz quaternária. O tempo de saída está no mesmo formato que o tempo de entrada.Casos de teste
Mostrar snippet de código
fonte
Perl 6 , 40 bytes
Experimente online!
Leva uma lista contendo a hora de início seguida pelo pressionamento do botão. Retorna o horário final. Tempos e botões são
(hour, minute)
pares. 24 horas.fonte
Perl 5 , 70 bytes
69 bytes de código + 1 para
-n
sinalizadorExperimente online!
Formato de entrada
hh:mm,abcdabcdabcdaddccbbaa
Onde:
Espaços ou outros separadores entre as prensas são insignificantes.
Explicação
fonte
Rápido ,
10696 bytes-10, graças ao Xcoder
Experimente em ideone!
A função assumirá o valor inicial e a matriz de tuplas e retornará a hora final.
fonte
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)}
. Isso também se livratypealias
.Logotipo da tartaruga, 304 bytes
Não otimizado; muitos espaços.
Leva uma lista como sua primeira entrada e a hora inicial + minuto (entradas separadas) como segunda e terceira, respectivamente.
Não consigo copiar + colar do Terrapin Logo, pois é uma versão de teste, então é isso :(
fonte
R , 61 bytes
Toma
I
como um vetor comprimento-2c(H,M)
eB
como uma lista de vetores comprimento-2 para os botõesc(H,M)
,. RepeteB
, definindoI
comoc(0,0)
se a soma é2
. Então mods no final. Há também uma função no cabeçalho para traduzir o pressionamento de botão no formato R certo, se você quiser testá-los todos; leva a matriz[(H,M),...]
como uma string.Experimente online!
fonte
C # (.NET Core) , 93 bytes
Experimente online!
Recebe entrada como em trinário, com 0 == (1,0), 1 == (0,1), 2 == (1,1) e o tempo em uma matriz com o índice 0 sendo horas e 1 sendo minutos. Modifica o intervalo de tempo no local.
fonte
Pitão, 22 bytes
Experimente aqui.
fonte
Mathematica, 54 bytes
Função anônima. Toma uma lista de 2 tuplas como entrada e retorna uma 2 tuplas como saída.
fonte
Scala , 116 bytes
Então, apenas tomo a hora de início como dois primeiros parâmetros da minha func (
h
em
) e tomo a sequência de entrada como uma matriz [Tuple2].Gostaria de saber ... devo contar a declaração de funções (
def time(h:Int,m:Int,a:Array[Tuple2[Int,Int]]):Tuple2[Int,Int]={
mais o final}
) na contagem de bytes?Experimente online!
fonte