iNeextt
@iNeextt
Junior Front end Developer

Как можно оптимизировать код решения этой задачи?

Для практики решил выполнить задачи отсюда

Задача:

/**
 * Известны результаты каждой из 4х четвертей баскетбольной встречи.
 * Нужно определить победителя матча. Побеждает команда,
 * набравшая больше очков в течение всего матча.
 *
 * Напишите функцию getWinner(points) возвращающую номер победившей команды,
 * либо undefined в случае ничьей.
 *
 * Пример:
 * getWinner(['23-26', '24-30', '30-27', '35-31']) === 2
 * getWinner(['36-32', '32-24', '20-28', '30-26']) === 1
 * getWinner(['36-18', '22-31', '27-21', '19-34']) === undefined
 */

Моё решение:

function getWinner(points) {
    let firstTeamPoints = [];
    let secondTeamPoints = [];

    points.map(item => {
        firstTeamPoints.push(item.slice(0, 2));
        secondTeamPoints.push(item.slice(3, 5));
    })

    let firstTeamSummary = 0;
    firstTeamPoints.forEach(item => {
       firstTeamSummary += +item;
    });

    let secondTeamSummary = 0;
    secondTeamPoints.forEach(item => {
        secondTeamSummary += +item;
    });

    if(firstTeamSummary === secondTeamSummary) {
        return undefined;
    }

    return firstTeamSummary > secondTeamSummary ? 1 : 2;
}

Костыль ли это? Как можно улучшить данный код?
  • Вопрос задан
  • 291 просмотр
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
function getWinner(points) {
  const [ a, b ] = points.reduce((acc, n) => (
    n.split('-').forEach((m, i) => acc[i] += +m),
    acc
  ), [ 0, 0 ]);

  return a === b
    ? undefined
    : a < b ? 2 : 1;
}

UPD. Всё равно слишком длинно. Вот так хорошо будет:

const getWinner = points => [ 2, , 1 ][Math.sign(eval(points.join('+'))) + 1];

Всё, "оптимизировал".
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы