CJam, 36 35 34 32 30 byte
riP*30/_60/_C/]2m*::-:mc:mC$3=
Outputnya dalam radian. Saya telah memverifikasi solusi untuk semua 86400 input yang mungkin.
Cobalah online di penerjemah CJam .
Ide
Karena 2π radian adalah putaran penuh, setiap interval menit / detik pada jam adalah 2π / 60 = π / 30 lebar radian.
Jadi, membagi jumlah detik dengan π / 30 menghasilkan posisi tangan kedua.
Jarum menit bergerak pada 1/60 dari laju jarum detik, jadi bagilah hasilnya dari atas 60 menghasilkan posisi jarum menit.
Demikian juga, membagi hasil terakhir dengan 12 menghasilkan posisi jarum jam.
Perhatikan bahwa tiga hasil bagi kami dari atas tidak harus dalam kisaran [0,2π).
Dengan menghitung sembilan kemungkinan perbedaan sudut tangan, kami memperoleh tiga 0 (jarak sudut antara tangan dan dirinya sendiri) dan enam jarak antara tangan yang berbeda.
Jika tangan terdekat berada di setengah yang tidak termasuk 12 , salah satu perbedaan dari atas akan menjadi output yang diinginkan (mod 2π ).
Namun, pada 01:55:30 (misalnya), jarum jam berada pada sudut 1,008 rad (57,75 derajat) dan jarum menit pada sudut 5,812 rad (333,00 derajat) dari 12 , memberikan perbedaan 4,804 rad (275,25 derajat). Dengan mengurangi hasil ini dari putaran penuh, kita mendapatkan sudut yang diukur "ke arah lain", yang sama dengan 1,479 rad (84,75 rad).
Sekarang, daripada memetakan setiap sudut θ dalam [0,2π) dan secara kondisional mengurangi hasil dari π , kita dapat menghitung arccos (cos (θ)) , karena cos bersifat periodik dan genap, dan arccos selalu menghasilkan nilai dalam [ 0, π) .
Melewati tiga hasil terkecil (semua nol), terkecil keempat akan menjadi output yang diinginkan.
Kode
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.
Versi alternatif (34 byte)
rd6*_60/_C/]360f%2m*::m360X$f-+$6=
Outputnya dalam derajat dan tidak ada fungsi trigonometri yang digunakan.
Cobalah online di penerjemah CJam .