CJam, 36 35 34 32 30 ไบต์
riP*30/_60/_C/]2m*::-:mc:mC$3=
เอาต์พุตเป็นเรเดียน ฉันได้ตรวจสอบการแก้ปัญหาสำหรับอินพุตที่เป็นไปได้ทั้งหมด 86400 รายการ
ลองใช้ออนไลน์ในล่าม CJam
ความคิด
ตั้งแต่ เรเดียน2πเป็นรอบเต็มทุกช่วงนาที / วินาทีบนนาฬิกาคือ2π / 60 = π / 30เรเดียนกว้าง
ดังนั้นการหารจำนวนวินาทีด้วยπ / 30ทำให้ได้ตำแหน่งของเข็มวินาที
เข็มนาทีเคลื่อนที่ด้วยความเร็วหกสิบวินาทีในหนึ่งวินาทีดังนั้นการแบ่งผลลัพธ์จากด้านบนด้วย60จะให้ตำแหน่งของเข็มนาที
เช่นเดียวกันหารผลลัพธ์สุดท้ายด้วย 12จะให้ตำแหน่งของเข็มชั่วโมง
โปรดทราบว่าสามความฉลาดของเราจากด้านบนไม่จำเป็นต้องอยู่ในช่วง [0,2π)
โดยการคำนวณความแตกต่างที่เป็นไปได้ทั้งเก้าของมุมมือเราได้รับสาม 0 (ระยะเชิงมุมระหว่างมือกับตัวมันเอง) และระยะทางหกระหว่างมือที่แตกต่าง
หากมือที่ใกล้ที่สุดอยู่บนครึ่งที่ไม่รวม12หนึ่งในความแตกต่างจากด้านบนจะเป็นผลลัพธ์ที่ต้องการ (mod 2π )
อย่างไรก็ตามเวลา01:55:30 (ตัวอย่าง) เข็มชั่วโมงอยู่ที่มุม 1.008 rad (57.75 องศา) และเข็มนาทีที่มุม 5.812 rad (333.00 องศา) จาก 12ให้ค่าต่าง 4.804 rad (275.25 องศา) ด้วยการลบผลลัพธ์นี้จากรอบเต็มเราจะได้มุมที่วัดได้ "ในทิศทางตรงกันข้าม" ซึ่งเท่ากับ 1.479 rad (84.75 rad)
ตอนนี้แทนที่จะจับคู่แต่ละมุมθใน[0,2π)และลบผลลัพธ์จากπตามเงื่อนไขเราก็สามารถคำนวณarccos (cos (())เนื่องจากcosเป็นทั้งคาบและคู่และarccosให้ค่าใน [ 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