<?php
function getAngle($hours, $minutes) {
$degreesMinutes = getDegreesForMinutes($minutes);
$degreesHours = getDegreesForHours($hours);
$hourArrowDegrees = getHourArrowDegrees($minutes);
return abs($degreesMinutes - ($degreesHours + $hourArrowDegrees)); }
function getDegreesForMinutes($minutes) {
$degreesInMinute = 360 / 60;
return $degreesInMinute * $minutes;
}
function getDegreesForHours($hours) {
$normalizedHours = $hours % 12;
$degreesInFiveMinutes = 30;
return $degreesInFiveMinutes * $normalizedHours;
}
function getHourArrowDegrees($minutes) {
return $minutes / 2;
}
$testcases = [
// час, минута, ожидаемый угол
[12, 0, 0],
[15, 20, 20],
[3, 20, 20],
[12, 30, 165],
[10, 50, 25],
];
foreach ($testcases as list($hours, $minutes, $expectedAngle)) { $givenAngle = getAngle($hours, $minutes);
echo "Время: {$hours}:{$minutes} ожидаемый угол: {$expectedAngle} дано: {$givenAngle}\n";
}
PD9waHAKCmZ1bmN0aW9uIGdldEFuZ2xlKCRob3VycywgJG1pbnV0ZXMpIHsKICAgICRkZWdyZWVzTWludXRlcyA9IGdldERlZ3JlZXNGb3JNaW51dGVzKCRtaW51dGVzKTsKICAgICRkZWdyZWVzSG91cnMgPSBnZXREZWdyZWVzRm9ySG91cnMoJGhvdXJzKTsKICAgICRob3VyQXJyb3dEZWdyZWVzID0gZ2V0SG91ckFycm93RGVncmVlcygkbWludXRlcyk7CiAgICByZXR1cm4gYWJzKCRkZWdyZWVzTWludXRlcyAtICgkZGVncmVlc0hvdXJzICsgJGhvdXJBcnJvd0RlZ3JlZXMpKTsKfQoKZnVuY3Rpb24gZ2V0RGVncmVlc0Zvck1pbnV0ZXMoJG1pbnV0ZXMpIHsKICAgICRkZWdyZWVzSW5NaW51dGUgPSAzNjAgLyA2MDsKICAgIHJldHVybiAkZGVncmVlc0luTWludXRlICogJG1pbnV0ZXM7Cn0KCmZ1bmN0aW9uIGdldERlZ3JlZXNGb3JIb3VycygkaG91cnMpIHsKICAgICRub3JtYWxpemVkSG91cnMgPSAkaG91cnMgJSAxMjsKICAgICRkZWdyZWVzSW5GaXZlTWludXRlcyA9IDMwOwogICAgcmV0dXJuICRkZWdyZWVzSW5GaXZlTWludXRlcyAqICRub3JtYWxpemVkSG91cnM7Cn0KCmZ1bmN0aW9uIGdldEhvdXJBcnJvd0RlZ3JlZXMoJG1pbnV0ZXMpIHsKICAgIHJldHVybiAkbWludXRlcyAvIDI7Cn0KCiR0ZXN0Y2FzZXMgPSBbCiAgICAvLyDRh9Cw0YEsINC80LjQvdGD0YLQsCwg0L7QttC40LTQsNC10LzRi9C5INGD0LPQvtC7CiAgICBbMTIsIDAsIDBdLAogICAgWzE1LCAyMCwgMjBdLAogICAgWzMsIDIwLCAyMF0sCiAgICBbMTIsIDMwLCAxNjVdLAogICAgWzEwLCA1MCwgMjVdLApdOwoKZm9yZWFjaCAoJHRlc3RjYXNlcyBhcyBsaXN0KCRob3VycywgJG1pbnV0ZXMsICRleHBlY3RlZEFuZ2xlKSkgewogICAgJGdpdmVuQW5nbGUgPSBnZXRBbmdsZSgkaG91cnMsICRtaW51dGVzKTsKICAgIGVjaG8gItCS0YDQtdC80Y86IHskaG91cnN9OnskbWludXRlc30g0L7QttC40LTQsNC10LzRi9C5INGD0LPQvtC7OiB7JGV4cGVjdGVkQW5nbGV9INC00LDQvdC+OiB7JGdpdmVuQW5nbGV9XG4iOwp9Cg==