aboutsummaryrefslogtreecommitdiff
path: root/src/strategy.py
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2023-02-19 12:57:27 +0100
committerMartin Kagamino Lehoux <martin@lehoux.net>2023-02-19 12:57:27 +0100
commit7200fcf3f4e4c22193b5b96452f9aa5131b1bc1c (patch)
tree812cf7b0f7a25b865d694199e9e4d29714a72fd3 /src/strategy.py
parent4f87f915ef7c6b8f20f70d35ff675059326680bd (diff)
refactor: Move to src
Diffstat (limited to 'src/strategy.py')
-rw-r--r--src/strategy.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/strategy.py b/src/strategy.py
new file mode 100644
index 0000000..6713299
--- /dev/null
+++ b/src/strategy.py
@@ -0,0 +1,40 @@
+from typing import Protocol
+
+from src.game import Game
+from src.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