blob: 5f42e3fcdda638e6e54ea55c58d78618eda9c25a (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
from typing import Protocol
from game import Game
from player import Player
class GameEloChangeStrategy(Protocol):
def proccess_game(
self, game: Game, current_elo: dict[Player, int],
) -> dict[Player, float]:
...
class SimpleEloChangeStrategy(GameEloChangeStrategy):
D = 400
K = 32
def proccess_game(
self, game: Game, current_elo: dict[Player, int],
) -> dict[Player, float]:
players_elo_updates = {player: 0.0 for player in game.scores}
for player_1, score_1 in game.scores.items():
for player_2, score_2 in game.scores.items():
if player_1 != player_2:
expected_score = 1 / (
1
+ 10
** ((current_elo[player_2] - current_elo[player_1]) / self.D)
)
result = (
1.0 if score_1 > score_2 else 0.0 if score_1 < score_2 else 0.5
)
players_elo_updates[player_1] += self.K * (result - expected_score)
return players_elo_updates
|