Tengo un viejo y estúpido despertador con dos botones: houry minute. El hourbotón incrementa la hora de una alarma configurada e minuteincrementa los minutos de una alarma configurada. Sin embargo, algunos diseñadores inteligentes se dieron cuenta de que presionar ambos botones al mismo tiempo debería tener un significado, y decidieron que presionar houryminute simultáneamente provocaría que la alarma se configurara en 12:00 am
/0:00
. Su tarea es simular este comportamiento.
Tarea
Dada una hora de inicio y una secuencia de estados de botón, calcule la hora de finalización.
Comenzando desde la hora de inicio, incremente la hora para cada ocurrencia de (1,0)
, incremente el minuto para cada ocurrencia de (0,1)
y configure el tiempo en 0:00
para cada ocurrencia de (1,1)
. Los Estados(0,0)
deben ignorarse porque no corresponden a ninguno de los botones que se presionan.
Al agregar minutos y horas, si el minuto / hora supera el máximo, configúrelo en 0
, es decir, al incrementar el valor de un minuto 59
debería establecer el valor de minuto en 0
y al incrementar el valor de 23
la hora debería establecer el valor de la hora en 0
. Incrementar valores minutos / hora por encima de sus límites no afectan el otro valor, por ejemplo incrementando el minuto de 10:59
rendimientos 10:00
, no 11:00
.
Ejemplo
Dado el tiempo de entrada 13:58
y los pasos [(0,1),(0,1),(0,1),(0,0),(1,1),(1,0)]
,
(0,1)
. Esto corresponde a minuteser presionado. El momento es ahora13:59
.(0,1)
. Esto corresponde a minuteser presionado. El momento es ahora13:00
.(0,1)
. Esto corresponde a minuteser presionado. El momento es ahora13:01
.(0,0)
. Esto corresponde a que no se presione ningún botón. El tiempo, no afectado, es ahora13:01
(1,1)
. Esto corresponde a que se presionen ambos botones. El momento es ahora0:00
.(1,0)
Esto corresponde a hourser presionado. El momento es ahora1:00
.
Como terminamos con 1:00
, es la salida.
I / O
La entrada consistirá en un tiempo y una secuencia de estados de botón. La salida es una sola vez.
El tiempo de entrada y el tiempo de salida pueden ser
- un tiempo de 2 tuplas de
(hour, minute)
o(minute, hour)
dentro de una24
hora como(13, 30)
(hour
rangos de0
a23
yminute
rangos de0
a59
) - igual que el anterior pero en
12
-Hora tiempo y un booleanoam
/pm
interruptor (hour
rangos de0
a11
o12
y1
a11
conminute
de0
a59
). - una cantidad de minutos desde
0:00
810 (de 0 a 1439, inclusive) - cualquier otro formato que codifique la misma información
La secuencia de estados de botón es una representación de una lista de 2 tuplas booleanas, por ejemplo:
- una lista de tuplas:
[(0,1),(1,0),(0,0),(1,1)]
- una cadena delimitada por espacios:
"01 10 00 11"
- una cuerda:
"01100011"
- en cuaternario:
[1,2,0,3]
- convertido a un entero:
99
- cualquier otro formato que codifique la misma información
Casos de prueba
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 con pasos Cuaternarios .[[initialHour, initialMinute], [hourPressed1, minuitePressed1], [hourPressed2, minuitePressed2], ...]
?Respuestas:
Jalea , 13 bytes
Pruébalo en línea!
fuente
C,
8987 bytes¡Gracias a @Jonathan Frech por guardar dos bytes!
Pruébalo en línea!
fuente
Jalea ,
21(17?) 19 bytes17 bytes? - Si el formato de entrada:
[[initHour, initMinute], [a1, b1], [a2, b2], ...]
es aceptable, tendríamos un enlace monádico y podríamos eliminarloW;
desde el comienzo de la segunda línea.Nota: Esto ahora está convergiendo hacia la respuesta de Erik the Outgolfers Jelly , así que no me molestaré más en jugar golf (no lo había visto) ...
Un enlace diádico que toma una lista de la hora inicial como enteros
[hour, minute]
(24 horas) a la izquierda y una lista de estados de botones[[hourPressed, minPressed], ...]
a la derechaque devuelve una lista del tiempo del resultado final como enteros, nuevamente
[hour, minute]
(24 horas).Pruébalo en línea! o ver el pruebas
¿Cómo?
fuente
⁹Ạ¤
conẠ}
. Otro -2 por usar un formato permitido. Finalmente, otro -1 porque la cadena antes delµ
aquí se llama como una diada ..Python 2 ,
8475 bytesPruébalo en línea!
Función que lleva tiempo como una tupla (hora, minuto); salidas de la misma manera.
fuente
all(b)
lugar 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):
¿este patrón coincide en Python?Retina , 75 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Elimine todo hasta la última pulsación del botón doble, reemplazándola por un tiempo vacío (en caso de que sea la última pulsación del botón).
Convierte a unario.
Ordena los minutos hasta el final.
Suma las horas juntas.
Agregue los minutos juntos, pero manteniendo las horas separadas.
Reduzca las horas y minutos módulo 24 o 60 según corresponda.
Convierte a decimal.
Formatear a dos dígitos.
fuente
Python 3,
135117115 bytes-20 bytes gracias a Jonathan Frech
Pruébalo en línea!
Toma el tiempo como una lista en el formulario
[hour, minute]
.fuente
(m[0]+1)
con-~m[0]
yif m[0]<23 else 0
con*(m[0]<23)
.b
yc
son siempre valores booleanos, puede reemplazarlosb+c>1
conb&c
.Haskell , 58 bytes
Pruébalo en línea! Ejemplo de uso:
foldl(#) (23,58) [(0,1),(1,0),(0,0),(0,1),(0,1)]
.fuente
JavaScript (ES6), 55 bytes
Toma la entrada en la sintaxis de curry, con el tiempo de inicio en la forma de matriz
[min, hour]
y los pasos como una matriz cuaternaria. El tiempo de salida está en el mismo formato que el tiempo de entrada.Casos de prueba
Mostrar fragmento de código
fuente
Perl 6 , 40 bytes
Pruébalo en línea!
Toma una lista que contiene la hora de inicio seguida de presionar el botón. Devuelve la hora de finalización. Los tiempos y los botones son
(hour, minute)
pares. Tiempo de 24 horas.fuente
Perl 5 , 70 bytes
69 bytes de código + 1 para
-n
banderaPruébalo en línea!
Formato de entrada
hh:mm,abcdabcdabcdaddccbbaa
dónde:
Los espacios u otros separadores entre las prensas son insignificantes.
Explicación
fuente
Swift ,
10696 bytes-10, gracias a Xcoder
Pruébalo en ideone!
La función tomará el valor inicial y la matriz de tuplas y devolverá el tiempo final.
fuente
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)}
. Esto también se deshace detypealias
.Logotipo de Terrapin, 304 bytes
No optimizado muchos espacios
Toma una lista como su primera entrada y la hora de inicio + minuto (entradas separadas) como segunda y tercera, respectivamente.
No puedo copiar + pegar desde el logotipo de Terrapin ya que es una versión de prueba, así que eso es :(
fuente
R , 61 bytes
Toma
I
como un vector de longitud-2c(H,M)
yB
como una lista de longitud-2 vectores para los botones,c(H,M)
. IteraB
, el establecimientoI
dec(0,0)
si la suma es2
. Luego se modifica al final. También hay una función en el encabezado para traducir las pulsaciones de botón al formato R correcto si desea probarlas todas; toma la matriz[(H,M),...]
como una cadena.Pruébalo en línea!
fuente
C # (.NET Core) , 93 bytes
Pruébalo en línea!
Toma la entrada como en trinario, con 0 == (1,0), 1 == (0,1), 2 == (1,1), y el tiempo en una matriz con el índice 0 son horas y 1 son minutos. Modifica la matriz de tiempo en su lugar.
fuente
Pyth, 22 bytes
Pruébalo aquí.
fuente
Mathematica, 54 bytes
Función anónima. Toma una lista de 2 tuplas como entrada y devuelve una 2 tuplas como salida.
fuente
Scala , 116 bytes
Así que tomo el tiempo de inicio como dos primeros parámetros de mi func (
h
ym
), y tomo la secuencia de entrada como una matriz [Tuple2].Me pregunto ... ¿debería contar la declaración de func (
def time(h:Int,m:Int,a:Array[Tuple2[Int,Int]]):Tuple2[Int,Int]={
más el final}
) en el recuento de bytes?Pruébalo en línea!
fuente