JavaScript: вычислить новые рейтинги между двумя или более противниками, используя систему рейтинга Elo
Основной JavaScript (синтаксис ES6): упражнение 75 с решением
Напишите программу на JavaScript для вычисления новых рейтингов между двумя или более противниками, используя систему рейтинга Elo. Он принимает массив предварительных рейтингов и возвращает массив, содержащий пост-рейтинги. Массив следует упорядочить от лучшего к худшему (победитель -> неудачник).
Примечание. Используйте оператор экспоненты ** и математические операторы для вычисления ожидаемого результата (шанс на выигрыш). каждого оппонента и рассчитать новый рейтинг для каждого. Перебирайте рейтинги, используя каждую перестановку, чтобы вычислить рейтинг после Эло для каждого игрока попарно. Пропустите второй аргумент, чтобы использовать kFactor по умолчанию, равный 32.
Пример решения:
HTML-код:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Compute the new ratings between two or more opponents using the Elo rating system</title>
</head>
<body>
</body>
</html>
Код JavaScript:
//#Source https://bit.ly/2neWfJ2
const elo = ([...ratings], kFactor = 32, selfRating) => {
const [a, b] = ratings;
const expectedScore = (self, opponent) => 1 / (1 + 10 ** ((opponent - self) / 400));
const newRating = (rating, i) =>
(selfRating || rating) + kFactor * (i - expectedScore(i ? a : b, i ? b : a));
if (ratings.length === 2) {
return [newRating(a, 1), newRating(b, 0)];
}
for (let i = 0, len = ratings.length; i < len; i++) {
let j = i;
while (j < len - 1) {
j++;
[ratings[i], ratings[j]] = elo([ratings[i], ratings[j]], kFactor);
}
}
return ratings;
};
console.log(elo([1200, 1200])); // [1216, 1184]
console.log(elo([1200, 1200], 64)); // [1232, 1168]
// 4 player FFA, all same rank
console.log(elo([1200, 1200, 1200, 1200]).map(Math.round)); // [1246, 1215, 1185, 1154]
/*
For teams, each rating can adjusted based on own team's average rating vs.
average rating of opposing team, with the score being added to their
own individual rating by supplying it as the third argument.
*/
Пример вывода:
[1216,1184] [1232,1168] [1246,1215,1185,1154]
Блок - схема:
Демонстрация в реальном времени:
См. Pen javascript-basic-упражнение-75-1 от w3resource ( @ w3resource ) в CodePen .
Улучшите этот пример решения и опубликуйте свой код через Disqus
Предыдущий: Напишите программу JavaScript, чтобы отфильтровать все значения из массива, для которого функция сравнения не возвращает true.
Далее: Напишите программу на JavaScript для выполнения предоставленной функции один раз для каждого элемента массива, начиная с последнего элемента массива.
Каков уровень сложности этого упражнения?
Новый контент: Composer: менеджер зависимостей для PHP , R программирования