Как мне показалось в код который нас учат писать в этих уроках закрался баг. До этих курсов с js не сталкивался, поэтому могу ошибаться, прошу тапками не кидать.
Суть вот в чем:
Как мы знаем программа в итоге должна вернуть список победителей и число их очков (если максимальный результат одинаков у нескольких игроков) и одного победителя и число его очков (если одинаковых максимальных результатов нет).
При определенных обстоятельствах программа может вернуть список победителей с разным числом очков, что противоречит здравому смыслу, т.к разных максимальных результатов быть не может
Ошибка, на мой взгляд, кроется в этой функции, в условии, после else
Фрагмент кода
var getWinners = function (players) {
var winners = [];
var max = players[0];
for (var i = 0; i < players.length; i++) {
var currentPlayer = players[i];
if (currentPlayer.points > max.points) {
max = currentPlayer;
winners = [max];
} else if (currentPlayer.points === max.points) {
winners.push(currentPlayer);
}
}
return winners;
};
Нужная нам строка
if (currentPlayer.points === max.points) {
winners.push(currentPlayer);
}
Если очки текущего игрока равны максимальным очкам, то этого игрока так же записывают в массив с победителями
Рассмотрим такую ситуацию
Допустим у нас 9 игроков, у каждого по 1 попытке, в игре 2 кости. Игроки кинули кости и массив с случайно выпавшими очками получился такой [3, 5, 2, 11, 10, 11, 4 ,12 , 7] (по порядку от первого игрока к последнему)
Изначально максимальным результатом принят результат первого игрока (3 очка) и он сравнивается с остальными результатами, если находится результат выше, то максимальный результат переписывается
При выполнении цикла сначала максимальный результат заменяется на 5 (игрок 2), затем на 11 (игрок 4). При сравнении максимального результата (11 очков) и результата игрока 6 (тоже 11 очков) выполняется условие currentPlayer.points === max.points и выполняется команда записи в массив с победителями.
winners = [{игрок 4, 11 очков}, {игрок 6, 11 очков}]
Но цикл продолжается дальше и вот доходит до сравнения максимального результата с результатом игрока 8 (12 очков), выполняется условие currentPlayer.points > max.points и массив winners принимает вид
winners = [{игрок 8, 12 очков}, {игрок 6, 11 очков}]
В итоге имеем двух победителей с разным числом очков