CJam、36 35 34 32 30バイト
riP*30/_60/_C/]2m*::-:mc:mC$3=
出力はラジアン単位です。86400のすべての可能な入力に対するソリューションを検証しました。
CJamインタプリタでオンラインで試してください。
考え
2πラジアンはフルラップであるため、クロックの1分/秒間隔は2π/ 60 =π/ 30ラジアン幅です。
したがって、秒数をπ/ 30で除算します秒針の位置が得られます。
分針は秒針の60分の1のペースで動くため、上からの結果を60で割ると分針の位置が得られます。
同様に、最後の結果を12で割ると、時針の位置が得られます。
上記の3つの商が必ずしも範囲[0,2π)にあるわけではないことに注意してください。
手の角度の9つの可能な差すべてを計算することにより、3つの0(手とそれ自体の間の角度距離)および異なる手の間の6つの距離を取得します。
最も近い手が12を含まない半分にある場合にある場合、上記との違いの1つは目的の出力(mod2π)です。
ただし、01:55:30(たとえば)では、時針は1.008 rad(57.75 deg)の角度にあり、分針は5.812 rad(333.00 deg)の角度にあります。 12、差が4.804 radになります。 (275.25 deg)。この結果をフルラップから差し引くことにより、「他の方向」で測定された角度が得られます。これは1.479 rad(84.75 rad)に相当します。
今、むしろ各アングルマッピングよりθにおける[0,2π)を条件付きの結果減算πを、我々ができ、単純に計算ARCCOS(COS(θ))ので、COS周期と偶数の両方であり、そしてARCCOSは常にに値をもたらします[ 0、π)。
3つの最小の結果(すべてゼロ)をスキップすると、4番目に小さい結果が目的の出力になります。
コード
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インタプリタでオンラインで試してください。