кодесурса
«JavaScript

JavaScript: вычислить новые рейтинги между двумя или более противниками, используя систему рейтинга Elo

script1adsense2code
script1adsense3code

Основной 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 программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code