Estás encadenado a una silla. Debajo de ti hay un enorme volcán. Un reloj de 12 horas a su lado marca siniestramente, y ve que tiene cables que van desde la parte posterior hasta una cadena, que lo dejará caer en el centro de la tierra. Pegado al reloj hay una nota:
Cada manecilla del reloj tiene un electrodo. Cuando ambas manecillas del reloj están en la misma posición, el poder fluye y mueres. Es decir, a menos que pueda decirme la hora exacta en que esto ocurrirá, al minuto más cercano.
Tienes una computadora que conoce todos los lenguajes de programación. Debe crear el programa más corto (esto es código de golf , y las lagunas estándar están prohibidas) que pueda y decirle al malvado científico qué hora será. Su programa debe recibir información (en cualquier método), que consta de la hora y los minutos. Debería devolver la siguiente hora y minuto (en cualquier método) que esto ocurra.
Según la página OEIS , los once tiempos de superposición son:
00:00:00 plus 0/11 s, 01:05:27 plus 3/11 s,
02:10:54 plus 6/11 s, 03:16:21 plus 9/11 s,
04:21:49 plus 1/11 s, 05:27:16 plus 4/11 s,
06:32:43 plus 7/11 s, 07:38:10 plus 10/11 s,
08:43:38 plus 2/11 s, 09:49:05 plus 5/11 s,
10:54:32 plus 8/11 s.
La próxima vez serían las 12:00:00. Los segundos y sus partes fraccionarias no son necesarios para este desafío. Simplemente redondea al minuto más cercano.
Casos de prueba:
0:00 (Or 12:00) > 1:05
1:00 > 1:05
11:56 > 12:00 (Or 0:00)
6:45 > 7:38
5:00 > 5:27
6:30 > 6:33 (round up)
El programa puede ser una función o un programa completo. No me importa si eliges 0:00
o 12:00
, y ambos son aceptables. ¡Buena suerte!
Respuestas:
JavaScript (Node.js) ,
5447 bytes (redondear al más cercano)-7 bytes. Gracias @ user202729
Pruébalo en línea!
JavaScript (Node.js) ,
403344 bytes (se redondea hacia 0)-3 bytes gracias a @Arnauld
-4 bytes gracias a @Kevin Cruijssen
Explicación
Nota al margen: estoy bastante seguro de que alguien que tenga más conocimientos de matemáticas puede jugar golf. Apenas sé cómo sumar y multiplicar
Pruébalo en línea!
fuente
05:00
debería generar05:27
pero generar en su05:25
lugar, y06:45
debería generar07:38
pero generar en su07:35
lugar. Aquí quizás una secuencia oeis útil: A17818111:56
salida parece en00:05
lugar de00:00
(o12:00
).a=(a+=b>=a*5)%12
se puede acortar un poco, pero no soy demasiado bueno en estoMath.round(x)
solo0|x+.5
?J , 31 bytes
Pruébalo en línea!
La forma de redondear un número en J es sumar
0.5
y tomar la palabra (<.
). Toma demasiados bytes ...Explicación
12 60&#.
(conversión de base mixta) convierte de una matriz de [hora, minuto] al minuto pasado desde las 0:00.Tenga en cuenta que a partir de las 0:00, cada 12/11 horas (es decir, 720/11 minutos), las dos manos se superponen una vez.
Por lo tanto, dado el valor de los minutos, simplemente redondea al múltiplo más cercano de 720/11 (diferente de sí mismo). Esto se puede lograr mediante
*
11/720 (J tiene un número racional literal11r720
), toma la palabra<.
, incrementa>:
, luego multiplícalo por 720/11.Tenga en cuenta que "multiplicar por 11/720" y "multiplicar por 720/11" son 2 acciones inversas, así como "convertir de [hora, minuto] a número de minutos transcurridos" y viceversa. Afortunadamente J tiene incorporado
&.
(debajo), que revierte alguna acción después de aplicar una transformación.Después de eso solo haz el redondeo:
0.5
+
entonces<.
.fuente
R , 68 bytes
Pruébalo en línea!
Explotando la ecuación:
donde
index
es 0 para la primera posición superpuesta (00:00), 1 para la segunda y así sucesivamente ...fuente
(a[...]...c(60,1))
6:30 > 6:33
.R , 88 bytes
Pruébalo en línea!
Aumentar el tiempo en un minuto. Comprueba el ángulo. Si no está lo suficientemente cerca, realiza un bucle hasta encontrar una solución.
fuente
Python 3 ,
8078 bytesEsta es mi primera presentación, así que las críticas constructivas son bienvenidas :)
-2 bytes gracias a @Jo King
Pruébalo en línea! (78) ¡
Pruébalo en línea! (80)fuente
Java 8,
8982 bytesFijo. Veré si puedo jugar golf más tarde (probablemente portando otra respuesta).
Pruébalo en línea.
Explicación:
QUE HACER
fuente
f.apply(56).apply(10)
rendimientos11 59
6:30 > 6:33
.Apl (Dyalog Unicode) , 28 bytes
Pruébalo en línea!
Explicación
((⍳11),⍪0,+\∊5/⊂5 6)
es una matriz de veces en que las manos se superponen (impresas al final del enlace tio)(⍸⌷1⊖⊣)⎕
encuentra el intervalo en el que la entrada está en la matriz y los índices debajo de ella se envuelven.fuente
C # (.NET Core) , 70 bytes
Pruébalo en línea!
Creo que pasa todos los casos de prueba. Aunque el caso h = 11 es algo feo
Explicación:
fuente
6:30 > 6:33
.JavaScript, 41 bytes
Mostrar fragmento de código
fuente
Jalea , 25 bytes
Pruébalo en línea!
Un enlace monádico que toma el tiempo como una lista de dos enteros y devuelve una lista de dos enteros correspondiente a la próxima vez que las manos deben tocarse.
fuente
Perl 6 , 43 bytes
Pruébalo en línea!
Una lambda anónima Cualquiera que tome dos enteros que representen horas y minutos y devuelva las horas y minutos en orden inverso. En este momento no es coherente cuando ingresa un tiempo alineado, ya sea que salga el siguiente tiempo alineado o permanezca en el mismo. Estoy esperando que OP responda sobre ese asunto, pero en este momento lo estoy tratando como indefinido.
Explicación
fuente