CJam, 36 35 34 32 30 Bytes
riP*30/_60/_C/]2m*::-:mc:mC$3=
Die Ausgabe erfolgt im Bogenmaß. Ich habe die Lösungen für alle 86400 möglichen Eingaben überprüft.
Probieren Sie es online im CJam-Interpreter aus .
Idee
Da 2π Radiant eine volle Runde ist, ist jedes Minuten / Sekunden-Intervall auf der Uhr 2π / 60 = π / 30 Radiant breit.
Teilen Sie also die Anzahl der Sekunden durch π / 30 Position des Sekundenzeigers.
Der Minutenzeiger bewegt sich um ein Sechzigstel der Geschwindigkeit des Sekundenzeigers. Wenn Sie also das Ergebnis von oben durch 60 dividieren, erhalten Sie die Position des Minutenzeigers.
Ebenso ergibt die Division des letzten Ergebnisses durch 12 die Position des Stundenzeigers.
Beachten Sie, dass unsere drei Quotienten von oben nicht unbedingt im Bereich liegen [0,2π] liegt.
Durch Berechnung aller neun möglichen Unterschiede der Zeigerwinkel erhalten wir drei 0 ‚s (Winkelabstand zwischen einer Hand und selbst) und den sechs Abstände zwischen den verschiedenen Händen.
Wenn sich die nächsten Hände auf einer Hälfte befinden, die 12 nicht enthält , ist einer der Unterschiede von oben die gewünschte Ausgabe (mod 2π ).
Um 01:55:30 (zum Beispiel) befindet sich der Stundenzeiger jedoch in einem Winkel von 1,008 rad (57,75 Grad) und der Minutenzeiger in einem Winkel von 5,812 rad (333,00 Grad) von 12 , was eine Differenz von 4,804 rad ergibt (275,25 Grad). Durch Subtrahieren dieses Ergebnisses von einer vollen Runde erhalten wir den "in der anderen Richtung" gemessenen Winkel, der 1,479 rad (84,75 rad) entspricht.
Anstatt nun jeden Winkel θ in [0,2π] abzubilden und das Ergebnis von π bedingt zu subtrahieren , können wir einfach Arccos (cos (θ)) berechnen , da cos sowohl periodisch als auch gerade ist und Arccos immer einen Wert in [ 0, π) .
Wenn Sie die drei kleinsten Ergebnisse (alle null) überspringen, ist das viertkleinste die gewünschte Ausgabe.
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.
Alternative Version (34 Byte)
rd6*_60/_C/]360f%2m*::m360X$f-+$6=
Die Ausgabe erfolgt in Grad und es werden keine trigonometrischen Funktionen verwendet.
Probieren Sie es online im CJam-Interpreter aus .