Inter-Net.PRO

Задачка про стрелки часов - решение для JavaScript

  • 201 49
29 июль 2018 14:13 - 04 авг 2018 15:34 #1 от Inter-Net PRO
Очень часто на собеседованиях задают такую задачку:
Нужно написать функцию, которая принимает время и возвращает в результате сколько градусов между часовой и минутной стрелками часов.

Вот мой вариант решения:
function degs(time) {
    let [ hours, minut ] = time.split(':'),
        degH = hours < 13 ? hours * 360 / 12 : (hours - 12) * 360 / 12,
        degM = minut * 360 / 60,
        deg;
    
    if (degH !== degM) deg = degH > degM ? degH - degM : degM - degH;
    else return 'Стрелки часов находятся в одной точке';

    return deg > 180 ? 360 - deg : deg;
}

console.log(degs('14:47'));  // → 138
console.log(degs('3:30'));   // → 90

Пояснение к коду
Переменные:
  • hours - часы
  • minut - минуты
  • degH - градусы часовой стрелки
  • degM - градусы минутной стрелки
  • deg - значение градусов между стрелками (возвращаемый результат функции)
Функция принимает время в 24-часовом формате, где часы и минуты разделены двоеточием ( 'чч:мм' ).
Так как между стрелками может быть два угла (внутренний и наружный), перед возвращением результата функция проверяет вид угла и возвращает внутренний угол.

  • 201 49
04 авг 2018 19:31 #2 от Inter-Net PRO
Тоже самое решение в стиле начинающих js-кодеров:
function degs(time) {
    let hours = time.split(':')[0],
        minut = time.split(':')[1],
        degM = minut * 360 / 60;
    
    if (hours < 13) degH = hours * 360 / 12;
    else degH = (hours - 12) * 360 / 12;

    let deg;

    if (degH !== degM) {
        if (degH > degM) deg = degH - degM;
        else deg = degM - degH;
    }
    else return 'Стрелки часов находятся в одной точке';
    
    if (deg > 180) return 360 - deg;
    else return deg;
}

Авторизация

Войти через соцсети: