CJam, 36 35 34 32 30 bytes
riP*30/_60/_C/]2m*::-:mc:mC$3=
A saída está em radianos. Eu verifiquei as soluções para todas as 86400 entradas possíveis.
Experimente on-line no intérprete CJam .
Idéia
Como 2π radianos é uma volta completa, cada intervalo de minuto / segundo no relógio tem 2π / 60 = π / 30 radianos de largura.
Assim, dividir o número de segundos por π / 30 produz a posição do ponteiro dos segundos.
O ponteiro dos minutos se move a 1/60 do ritmo do ponteiro dos segundos, portanto, dividir o resultado de cima por 60 gera a posição do ponteiro dos minutos.
Da mesma forma, dividir o último resultado por 12 gera a posição do ponteiro das horas.
Observe que nossos três quocientes acima não estão necessariamente no intervalo [0,2π).
Ao calcular todas as nove possíveis diferenças dos ângulos das mãos, obtemos três 0 (distância angular entre uma mão e ela mesma) e as seis distâncias entre as diferentes mãos.
Se os ponteiros mais próximos estiverem na metade que não inclui 12 , uma das diferenças acima será a saída desejada (mod 2π ).
No entanto, às 01:55:30 (por exemplo), o ponteiro das horas está em um ângulo de 1.008 rad (57.75 graus) e o ponteiro dos minutos em um ângulo de 5.812 rad (333.00 graus) de 12 , dando uma diferença de 4.804 rad (275,25 graus). Subtraindo esse resultado de uma volta completa, obtemos o ângulo medido "na outra direção", que é igual a 1,479 rad (84,75 rad).
Agora, em vez de mapear cada ângulo θ em [0,2π) e subtrair condicionalmente o resultado de π , podemos simplesmente calcular arccos (cos (θ)) , pois cos é periódico e par e os arccos sempre produzem um valor em [ 0, π) .
Ignorando os três menores resultados (todos zero), o quarto menor será a saída desejada.
Código
ri e# Read an integer from STDIN.
P*30/ e# Multiply by π and divide by 30.
_60/ e# Divide a copy by 60.
_C/ e# Divide a copy by 12.
]2m* e# Push the array of all pairs of quotients.
::- e# Replace each pair by its difference.
:mc e# Apply cosine to each difference.
:mC e# Apply arccosine to each cosine.
$3= e# Sort and select the fourth smallest element.
Versão alternativa (34 bytes)
rd6*_60/_C/]360f%2m*::m360X$f-+$6=
A saída é em graus e nenhuma função trigonométrica é usada.
Experimente on-line no intérprete CJam .