Un reloj analógico tiene 2 manecillas *: hora y minuto.
Estas manecillas rodean la esfera del reloj a medida que pasa el tiempo. Cada rotación completa de la manecilla de minutos da como resultado 1/12 de una rotación de la manecilla de hora. 2 rotaciones completas de la manecilla de la hora significa un día completo.
Como estas manos se fijan en el mismo punto central y giran alrededor de ese punto, siempre puede calcular el ángulo entre las manos. De hecho, hay 2 ángulos en cualquier momento dado; Uno más grande y uno más pequeño (a veces ambos equivalen a 180, pero eso no es importante)
* Nuestros relojes hipotéticos no tienen segundero
Tarea
Dado un tiempo en formato de 24 horas, muestre el ángulo más pequeño entre las manos, en grados. Si las manecillas están directamente opuestas entre sí (como en 6:00
, 18:00
etc.) salida 180
Reglas
De entrada puede ser tomado como: - Un delimitador separa cadena: 6:32
, 14.26
- 2 valores separados, cadenas o enteros: 6, 32
, 14, 26
- Una matriz de 2 valores, cadenas o enteros: [6, 32]
,[14, 26]
También puede especificar opcionalmente que su respuesta requiere insumos ser acolchada a 2 dígitos (suponiendo que toma cuerdas), es decir: 06:32
, 06, 32
,[06, 32]
También puede revertir opcionalmente el orden de las entradas, teniendo minutos luego horas, es decir: 32:6
, 32, 6
,[26, 14]
La hora será un valor entero entre 0
y 23
(inclusive) El minuto será un valor entero entre 0
y 59
(inclusive)
Puede suponer que la manecilla de los minutos se ajusta a incrementos de 6 grados a lo largo de la cara (una posición espaciada uniformemente para cada valor de minuto)
Puede suponer que la manecilla de la hora se ajusta a incrementos de 0.5 grados a lo largo de la cara (una posición espaciada uniformemente para valor de cada minuto por valor de hora)
La salida debe darse en grados, no en radianes. Puede incluir un final.0
para números enteros
Tanteo
Este es el código de golf, por lo que gana menos bytes en cada idioma .
Casos de prueba
Input: 06:32
Output: 4
Input: 06:30
Output: 15
Input: 18:32
Output: 4
Input: 06:01
Output: 174.5
Input: 00:00
Output: 0
Input: 00:01
Output: 5.5
Input: 12:30
Output: 165
Input: 6:00
Output: 180
Input: 23:59
Output: 5.5
00:59 -> 35.5
(un valor pequeño de con un valor grande de m puede hacer que algunas implementaciones fallen).Respuestas:
JavaScript (ES6),
41 4039 bytesToma entradas como
(h)(m)
.Pruébalo en línea!
¿Cómo?
En lugar de trabajar directamente en el rango[0..360] , definimos una variable temporal x en el rango [0..4] :
El ángulo en grados viene dado por:
Sin embargo, la fórmula se implementa de manera un poco diferente en el código JS, ya que definitivamente queremos evitar el uso de los largos
Math.abs()
yMath.min()
.En lugar de calcular el valor absoluto, forzamos un valor positivo en[ 0..12 ] calculando:
Y en lugar de calcular el mínimo, determinamos en qué caso estamos simplemente haciendo un bit Y con2 , y es por eso que elegimos un intervalo limitado por una potencia de 2 en primer lugar.
fuente
Jalea ,
1412 bytesPruébalo en línea!
Un enlace monádico que toma el tiempo como una lista de dos enteros: hora, minuto.
¡Gracias a @JonathanAllan por guardar 2 bytes!
Explicación
fuente
(-180, 180]
que es equivalente (mod 360). Esos builtins ...Ø°
for360
y“<¿‘
for60,11
. Me gustaד<¿‘Iæ%Ø°AH
TIOMATL, 18 bytes
Acepta dos entradas de horas seguidas de minutos. Utiliza el mismo método que esta respuesta
Pruébalo en MATL Online
Explicación
fuente
180
lugar de0
?Wolfram Language (Mathematica) ,
302928 bytesPruébalo en línea!
versión sin golf:
El argumento de la función es
# = {h,m}
contiene la hora y el minuto. Esta lista longitud de dos se interpreta como un vector y el punto-producto con{30,-5.5}
se calcula:#.{30,-5.5} = 30*h-5.5*m
. Luego calculamos el módulo simétrico de 360Mod[#.{30,-5.5}, 360, -180]
dando un ángulo en el intervalo -180 .. + 180.Abs
toma el valor absoluto del mismo.Como todos los operadores involucrados son lineales, podemos multiplicar y dividir todos los números que aparecen, sin embargo, son más convenientes. Al extraer un factor de
5
la expresión y dividir todos los números en la expresión por 5, el conteo de bytes se minimiza.fuente
Alquimista , 134 bytes
Pruébalo en línea!
Explicación
Configuración inicial. Ingresa horas y minutos en
h
ym
, establece el ángulo actuald
en 360 grados (720 medios grados), se configuraa
para calcular el ángulo principal y establece el indicador de salida.Cada hora suma 30 grados, y cada minuto resta 5,5 grados.
Si bien el
r
indicador (inverso) no está establecido, cadad
átomo debe mover una
átomo ab
. Esto ocurre después de que los minutos se hayan agotado, para evitar una "condición de carrera". Cuando no haya
átomos, configurer
para invertir este flujo.Tenga en cuenta que esta segunda regla puede activarse varias veces e incluso puede activarse antes de la regla de configuración inicial. Esto no daña nada, por lo que no hay necesidad de evitarlo. La
0x
condición maneja un caso límite: cuando la entrada es 6:00, no haya
átomos cuando el programa termina, pero hayx
átomos si el resultado final es al menos 1 grado.Lo contrario: cuando el ángulo con signo es mayor de 180 grados, mueva los
b
átomos haciaa
para disminuir el ángulo de salida. Deje de invertir cuando el ángulo alcance "360".Cuando se agoten todos los átomos en grados, divídalos entre 2 para obtener el ángulo de salida.
Una vez hecho esto, imprima exactamente una vez utilizando el
f
indicador de la configuración inicial.fuente
Python 3.8 (prelanzamiento) ,
4543 bytes-2 bytes gracias a Erik .
Pruébalo en línea!
h%12
- hora en formato de 12 horash%12*30
- ángulo de la manecilla de la hora a la hora completam/2
- ángulo de la manecilla de la hora movida enm
minutosh%12*30+m/2
- posición actual de la manecilla de la hora como un ángulom*6
- ángulo de la manecilla de los minutos (360°/60 = 6°
)fuente
Stax , 15 bytes
Ejecutar y depurarlo
m =
cantidad de minutos desde la medianoched = 5.5 * m
min(d % 360, -d % 360)
.fuente
C # (compilador interactivo de Visual C #) ,
4745 bytesPruébalo en línea!
fuente
Carbón de leña , 22 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Toma la entrada como dos enteros. Explicación:
fuente
Perl 6 , 28 bytes
Pruébalo en línea!
Utiliza algunos trucos robados de otras respuestas y calcula
fuente
Python 3 , 40 bytes
Pruébalo en línea!
h*30
- ángulo entre el mediodía y la horah
cuando son los minutos0
; si la hora es igual o mayor que 12, este ángulo puede ser igual o mayor que 360 °m*6
- ángulo entre el mediodía y la manecilla de los minutosm*.5
- ángulo la manecilla de la hora avanzó desde la hora completa después dem
minutos (por ejemplo: si son las 4:24, la manecilla de la hora avanzó 12 grados desde la posición en que estaba a las 4 en punto)h*30-m*5.5
, uno de los dos ángulos entre la manecilla de la hora y la manecilla de los minutos; el coeficiente param
es5.5
porquem*6-m*.5=m*5.5
; esta todavía no es la respuesta porque puede ser un valor mayor que 360 ° (por ejemplo: ifh,m=13,0
) o menor que 0 ° (por ejemplo: ifh,m=12,30
)(h*30-m*5.5)%360
- este módulo tiene en cuenta los casos en que el valor calculado anteriormente no está entre 0 y 360 °; esta todavía no es la respuesta porque podría ser el más amplio de los dos ángulos, mientras que queremos el más estrecho180-abs(180-(h*30-m*5.5)%360)
: este es el resultado final; la regla general es quex-abs(x-y)
es equivalente amin(y,x-y)
, lo que daría el resultado correctofuente
Tcl ,
71745954 bytesPruébalo en línea!
ahorró 5 bytes usando una expresión lambda
fuente
Pitón 3,
5857 Bytes-1 / -2 Gracias a @Shaggy
Implementación ingenua, toma entrada en forma de
[6,32]
. Algunos bytes probablemente se pueden eliminar de la última línea especialmente.Python 2,
5250 bytesfuente
30*h-5.5*m
debería ahorrarte un par de bytes.def
función de estilo también debería guardar algunos bytes.Perl 5
-MList::Util=min -p
, 37 bytesPruébalo en línea!
Toma la entrada como horas seguidas de minutos en una línea separada porque ahorró algunos bytes.
fuente
[R], 45 bytes
fuente
Japt , 16 bytes
Intentalo
fuente
> <> , 17 bytes
Pruébalo en línea! (6:32)
Toma entrada como h, m en la pila.
Explicación
fuente
05AB1E , 16 bytes
Toma horas como primera entrada, minutos como segunda.
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
Básicamente implementa la siguiente fórmula:
fuente
Pyret, 59 bytes
fuente