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:00para 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 59debería establecer el valor de minuto en 0y al incrementar el valor de 23la 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:59rendimientos 10:00, no 11:00.
Ejemplo
Dado el tiempo de entrada 13:58y 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 una24hora como(13, 30)(hourrangos de0a23yminuterangos de0a59) - igual que el anterior pero en
12-Hora tiempo y un booleanoam/pminterruptor (hourrangos de0a11o12y1a11conminutede0a59). - una cantidad de minutos desde
0:00810 (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 0con*(m[0]<23).bycson siempre valores booleanos, puede reemplazarlosb+c>1conb&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
-nbanderaPruébalo en línea!
Formato de entrada
hh:mm,abcdabcdabcdaddccbbaadó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
Icomo un vector de longitud-2c(H,M)yBcomo una lista de longitud-2 vectores para los botones,c(H,M). IteraB, el establecimientoIdec(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 (
hym), 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