Um relógio analógico tem 2 ponteiros *: hora e minuto.
Esses ponteiros circulam o mostrador do relógio à medida que o tempo passa. Cada rotação completa do ponteiro dos minutos resulta em 1/12 de uma rotação do ponteiro das horas. 2 rotações completas do ponteiro das horas significam um dia inteiro.
Como essas mãos são fixadas no mesmo ponto central e giram em torno desse ponto, você sempre pode calcular o ângulo entre as mãos. De fato, existem 2 ângulos a qualquer momento; Um maior e outro menor (às vezes ambos são iguais a 180, mas isso não é importante)
* Nossos relógios hipotéticos não têm ponteiros de segundos
Tarefa
Dada uma hora no formato de 24 horas, produza o ângulo menor entre as mãos, em graus. Se os ponteiros estiverem diretamente opostos um ao outro (como em 6:00
, 18:00
etc), produza 180
Regras
De entrada pode ser feita como: - Um delimitador separados cadeia: 6:32
, 14.26
- 2 valores separados, cordas ou ints: 6, 32
, 14, 26
- Uma matriz de 2 valores, cordas ou ints: [6, 32]
,[14, 26]
Você também pode especificar opcionalmente que sua resposta requer entradas ser acolchoado para 2 dígitos (supondo que você tomar cordas), ou seja: 06:32
, 06, 32
,[06, 32]
Também pode inverter, opcionalmente, o ordem das entradas, tendo minutos, em seguida hora, ou seja: 32:6
, 32, 6
,[26, 14]
Hora será um valor inteiro entre 0
e 23
(inclusive) Minuto será um valor inteiro entre 0
e 59
(inclusive)
Você pode assumir que o ponteiro dos minutos se ajusta a incrementos de 6 graus ao longo da face (uma posição espaçada igualmente para cada valor de minuto)
Você pode assumir que o ponteiro dos minutos se ajusta a incrementos de 0,5 graus ao longo da face (uma posição espaçada igualmente para valor de cada minuto por valor de hora)
A saída deve ser dada em graus, não em radianos. Você pode incluir um final .0
para números inteiros
Pontuação
Isso é código-golfe, e o menor número de bytes em cada idioma vence!
Casos de teste
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
(um pequeno valor de com um grande valor de provavelmente fará com que algumas implementações falhem). mRespostas:
JavaScript (ES6),
41 4039 bytesToma entradas como
(h)(m)
.Experimente online!
Quão?
Em vez de trabalhar diretamente no intervalo , definimos uma variável temporária no intervalo :[ 0..360 ] x [ 0..4 ]
O ângulo em graus é dado por:
No entanto, a fórmula é implementada de maneira um pouco diferente no código JS, pois definitivamente queremos evitar o uso do extenso
Math.abs()
eMath.min()
.Em vez de calcular o valor absoluto, forçamos um valor positivo em calculando:[ 0..12 ]
E, em vez de calcular o mínimo, determinamos em que caso estamos simplesmente fazendo um AND bit a bit com - e é por isso que escolhemos um intervalo limitado por uma potência de em primeiro lugar.2 2
fonte
Geléia ,
1412 bytesExperimente online!
Um link monádico que leva o tempo como uma lista de dois números inteiros: hora, minuto.
Obrigado a @ JonathanAllan por salvar 2 bytes!
Explicação
fonte
(-180, 180]
equivalente (mod 360). Aqueles builtins ...Ø°
for360
e“<¿‘
for60,11
. Como assimד<¿‘Iæ%Ø°AH
TIOMATL, 18 bytes
Aceita duas entradas de horas seguidas de minutos. Usa o mesmo método que esta resposta
Experimente no MATL Online
Explicação
fonte
180
vez de0
?Wolfram Language (Mathematica) ,
302928 bytesExperimente online!
versão não destruída:
O argumento da função está
# = {h,m}
contendo a hora e o minuto. Esta lista comprimento de dois é interpretado como um vetor e o produto dot com{30,-5.5}
é calculado:#.{30,-5.5} = 30*h-5.5*m
. Depois calculamos o módulo simétrico de 360 comMod[#.{30,-5.5}, 360, -180]
um ângulo no intervalo -180 .. + 180.Abs
toma o valor absoluto do mesmo.Como todos os operadores envolvidos são lineares, podemos multiplicar e dividir todos os números que aparecem, mas são mais convenientes. Ao extrair um fator da
5
expressão e dividir todos os números na expressão por 5, a contagem de bytes é minimizada.fonte
Alquimista , 134 bytes
Experimente online!
Explicação
Configuração inicial. Introduz horas e minutos em
h
em
, define o ângulo atuald
para 360 graus (720 meio graus), configuraa
para calcular o ângulo principal e define o sinalizador de saída.Cada hora adiciona 30 graus e cada minuto subtrai 5,5 graus.
Enquanto o
r
sinalizador (reverso) não estiver definido, cadad
átomo deve mover uma
átomo parab
. Isso ocorre depois que os minutos são esgotados, para evitar uma "condição de corrida". Quando não houvera
átomos restantes, definar
para reverter esse fluxo.Observe que esta segunda regra pode ser disparada várias vezes e até mesmo antes da regra de configuração inicial. Isso não prejudica nada, portanto não há necessidade de evitar isso. A
0x
condição lida com um caso de borda: quando a entrada é 6:00, não háa
átomos quando o programa termina, mas existemx
átomos se o resultado final for de pelo menos 1 grau.O inverso: quando o ângulo assinado for maior que 180 graus, mova os
b
átomos paraa
para diminuir o ângulo para a saída. Pare de inverter quando o ângulo atingir "360".Quando todos os átomos em grau estiverem esgotados, divida por 2 para obter o ângulo de saída.
Depois disso, imprima exatamente uma vez usando o
f
sinalizador da configuração inicial.fonte
Python 3.8 (pré-lançamento) ,
4543 bytes-2 bytes graças a Erik .
Experimente online!
h%12
- hora no formato de 12 horash%12*30
- ângulo do ponteiro das horas em toda a horam/2
- ângulo do ponteiro das horas emm
minutosh%12*30+m/2
- posição atual do ponteiro das horas como ângulom*6
- ângulo do ponteiro dos minutos (360°/60 = 6°
)fonte
Stax , 15 bytes
Execute e depure
m =
número de minutos desde a meia-noited = 5.5 * m
min(d % 360, -d % 360)
.fonte
C # (compilador interativo do Visual C #) ,
4745 bytesExperimente online!
fonte
Carvão , 22 bytes
Experimente online! Link é a versão detalhada do código. Aceita entrada como dois números inteiros. Explicação:
fonte
Perl 6 , 28 bytes
Experimente online!
Usa alguns truques roubados de outras respostas e calcula
fonte
Python 3 , 40 bytes
Experimente online!
h*30
- ângulo entre o meio dia e a horah
em que o minuto é0
; se a hora for igual ou superior a 12, este ângulo poderá ser igual ou superior a 360 °m*6
- ângulo entre o meio-dia e o ponteiro dos minutosm*.5
- ângulo que o ponteiro das horas avançou a partir da hora inteira apósm
minutos (por exemplo: se for 4:24, o ponteiro das horas avançou 12 graus a partir da posição em que estava às 4 horas)h*30-m*5.5
- um dos dois ângulos entre o ponteiro das horas e o ponteiro dos minutos; o coeficiente param
é5.5
porquem*6-m*.5=m*5.5
; ainda não é a resposta, pois pode ser um valor maior que 360 ° (por exemplo: seh,m=13,0
) ou menor que 0 ° (por exemplo: seh,m=12,30
)(h*30-m*5.5)%360
- este módulo leva em consideração os casos em que o valor calculado acima não está entre 0 e 360 °; ainda não é a resposta, porque poderia ser o maior dos dois ângulos, enquanto queremos o mais estreito180-abs(180-(h*30-m*5.5)%360)
- esse é o resultado final; a regra geral é quex-abs(x-y)
é equivalente amin(y,x-y)
, o que daria o resultado corretofonte
Tcl ,
71745954 bytesExperimente online!
salvou 5 bytes usando uma expressão lambda
fonte
Python 3,
5857 bytes-1 / -2 Graças a @Shaggy
Implementação ingênua, recebe entrada na forma de
[6,32]
. Alguns bytes provavelmente podem ser removidos da última linha, especialmente.Python 2,
5250 bytesfonte
30*h-5.5*m
você deve economizar alguns bytes.def
função estilo A também salva alguns bytes.Perl 5
-MList::Util=min -p
, 37 bytesExperimente online!
Recebe a entrada como horas seguidas de minutos em uma linha separada, pois salvou alguns bytes.
fonte
[R], 45 bytes
fonte
Japonês , 16 bytes
Tente
fonte
> <> , 17 bytes
Experimente online! (6:32)
Recebe a entrada como h, m na pilha.
Explicação
fonte
05AB1E , 16 bytes
Leva horas como primeira entrada, minutos como segundo.
Experimente online ou verifique todos os casos de teste .
Explicação:
Implementa basicamente a seguinte fórmula:
fonte
Pyret, 59 bytes
fonte