CJam, 36 35 34 32 30 바이트
riP*30/_60/_C/]2m*::-:mc:mC$3=
출력은 라디안입니다. 가능한 모든 86400 입력에 대한 솔루션을 확인했습니다.
CJam 통역사 에서 온라인으로 사용해보십시오 .
생각
이후 2π 라디안은 시계 전체 무릎 각 분 / 초 간격이다 2π / 60 = π / 30 와이드 라디안.
따라서 초 수를 π / 30으로 나누면 초침의 위치가됩니다.
분침은 초침의 60 분의 1의 속도로 움직이므로 위의 결과를 60으로 나누면 분침의 위치가 산출됩니다.
마찬가지로 마지막 결과를 12로 나누면 시침의 위치가 산출됩니다.
위의 세 몫이 반드시 [0,2π) 범위에있는 것은 아닙니다 .
손 각도의 9 가지 가능한 차이를 모두 계산함으로써, 우리는 3 개의 0 (손과 그 자체 사이의 각거리)과 다른 손 사이의 6 개의 거리를 얻습니다 .
가장 가까운 손이 12를 포함하지 않는 절반에있는 경우 위와 다른 점 중 하나는 원하는 출력 (mod 2π )입니다.
그러나 01:55:30 (예 :) 에서는 시침이 1.008 rad (57.75도)이고 분침이 12 에서 5.812 rad (333.00도) 인 4.804 rad 의 차이를 나타냅니다. (275.25도). 전체 랩에서이 결과를 빼서 "다른 방향으로"측정 된 각도는 1.479 rad (84.75 rad)입니다.
지금, 오히려 각 각 매핑보다 θ 에서 [0,2π를) 조건부의 결과 뺀 π를 , 우리가 할 수 단순히 계산 ARCCOS (COS (θ)) 이후, COS 주기 심지어 모두이며, ARCCOS는 항상에 값을 산출 [ 0, π) .
세 가지 가장 작은 결과 (모두 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 통역사 에서 온라인으로 사용해보십시오 .