CJam, 36 35 34 32 30 байт
riP*30/_60/_C/]2m*::-:mc:mC$3=
Вихід у радіанах. Я перевірив рішення для всіх 86400 можливих входів.
Спробуйте його в Інтернеті в інтерпретаторі CJam .
Ідея
Оскільки 2π радіани - це повний круг, кожна хвилина / секунда інтервал на годиннику становить 2π / 60 = π / 30 радіанів.
Таким чином, ділення кількості секунд на π / 30 дає позицію другої руки.
Хвилинна рука рухається в один шістдесят темпу другої руки, тому ділення результату зверху на 60 дає позицію хвилинної руки.
Аналогічно, ділення останнього результату на 12 дає позицію годинної руки.
Зауважимо, що наші три частки зверху не обов'язково знаходяться в діапазоні [0,2π).
Обчислюючи всі дев'ять можливих різниць кутів рук, ми отримуємо три 0 's (кутова відстань між рукою і самою) та шість відстаней між різними руками.
Якщо найближчі руки знаходяться на половині, яка не включає 12 , однією з відмінностей зверху буде бажаний вихід (мод 2π ).
Однак о 01:55:30 (наприклад) годинна рука знаходиться під кутом 1,008 рад (57,75 град.), А хвилинна рука під кутом 5,812 рад (333,00 град.) Від 12 , що дає різницю 4,804 рад. (275,25 град.) Віднімаючи цей результат від повного кола, отримуємо кут, виміряний «в інший бік», який дорівнює 1,447 рад (84,75 рад).
Тепер, замість відображення кожного кута θ в [0,2π) і умовно віднімання результату від π , ми можемо просто обчислити дуги (cos (θ)) , оскільки cos є періодичним і парним, а дуги завжди дають значення в [ 0, π) .
Пропускаючи три найменші результати (усі нулі), четвертий найменший буде бажаним результатом.
Код
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.
Альтернативна версія (34 байти)
rd6*_60/_C/]360f%2m*::m360X$f-+$6=
Вихід у градусах, і тригонометричні функції не використовуються.
Спробуйте його в Інтернеті в інтерпретаторі CJam .