CJam, 36 35 34 32 30 octets
riP*30/_60/_C/]2m*::-:mc:mC$3=
La sortie est en radians. J'ai vérifié les solutions pour toutes les 86400 entrées possibles.
Essayez-le en ligne dans l' interpréteur CJam .
Idée
Étant donné que 2π radians est un tour complet, chaque intervalle minute / seconde sur l'horloge a une largeur de 2π / 60 = π / 30 radians.
Ainsi, la division du nombre de secondes par π / 30 donne la position de la trotteuse.
L'aiguille des minutes se déplace à un soixantième du rythme de l'aiguille des secondes, donc diviser le résultat par le haut par 60 donne la position de l'aiguille des minutes.
De même, la division du dernier résultat par 12 donne la position de l'aiguille des heures.
Notez que nos trois quotients ci-dessus ne sont pas nécessairement dans la plage [0,2π).
En calculant les neuf différences possibles d'angles des mains, nous obtenons trois 0 (distance angulaire entre une main et elle-même) et les six distances entre les différentes mains.
Si les mains les plus proches sont sur une moitié qui n'inclut pas 12 , l'une des différences par rapport au dessus sera la sortie souhaitée (mod 2π ).
Cependant, à 01:55:30 (par exemple), l'aiguille des heures est à un angle de 1,008 rad (57,75 degrés) et l'aiguille des minutes à un angle de 5,812 rad (333,00 degrés) de 12 , ce qui donne une différence de 4,804 rad (275,25 degrés). En soustrayant ce résultat d'un tour complet, nous obtenons l'angle mesuré "dans l'autre sens", ce qui équivaut à 1,479 rad (84,75 rad).
Maintenant, plutôt que de cartographier chaque angle θ dans [0,2π) et de soustraire conditionnellement le résultat de π , nous pouvons simplement calculer arccos (cos (θ)) , car cos est à la fois périodique et pair, et arccos donne toujours une valeur dans [ 0, π) .
En sautant les trois plus petits résultats (tous à zéro), le quatrième plus petit sera la sortie souhaitée.
Code
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.
Version alternative (34 octets)
rd6*_60/_C/]360f%2m*::m360X$f-+$6=
La sortie est en degrés et aucune fonction trigonométrique n'est utilisée.
Essayez-le en ligne dans l' interpréteur CJam .