fork download
  1. <?php
  2.  
  3. function getAngle($hours, $minutes) {
  4. // 5 - столько минут проходит часовая стрелка за час
  5. $hoursArrowPosition = normalizeHour($hours) * 5 + getHourArrowShift($minutes);
  6. $degsInMinute = 360 / 60;
  7.  
  8. return abs($degsInMinute * ($minutes - $hoursArrowPosition));
  9. }
  10.  
  11. function normalizeHour($hour) {
  12. return ($hour > 11)
  13. ? $hour - 12
  14. : $hour;
  15. }
  16.  
  17. // На сколько минут сдвинулась часовая стрелка
  18. // Например для 12:30 часовая стрелка сдвинется на 2,5 минуты
  19. function getHourArrowShift($minutes) {
  20. $minutesInHour = 60;
  21. return ($minutes / $minutesInHour) * 5;
  22. }
  23.  
  24. $testcases = [
  25. // час, минута, ожидаемый угол
  26. [12, 0, 0],
  27. [15, 20, 20],
  28. [3, 20, 20],
  29. [12, 30, 165],
  30. [10, 50, 25],
  31. ];
  32.  
  33. foreach ($testcases as list($hours, $minutes, $expectedAngle)) {
  34. $givenAngle = getAngle($hours, $minutes);
  35. echo "Время: {$hours}:{$minutes} ожидаемый угол: {$expectedAngle} дано: {$givenAngle}\n";
  36. }
  37.  
  38.  
Success #stdin #stdout 0.01s 52488KB
stdin
Standard input is empty
stdout
Время: 12:0 ожидаемый угол: 0 дано: 0
Время: 15:20 ожидаемый угол: 20 дано: 20
Время: 3:20 ожидаемый угол: 20 дано: 20
Время: 12:30 ожидаемый угол: 165 дано: 165
Время: 10:50 ожидаемый угол: 25 дано: 25