aboutsummaryrefslogtreecommitdiff
path: root/api/rating.py
diff options
context:
space:
mode:
Diffstat (limited to 'api/rating.py')
-rw-r--r--api/rating.py54
1 files changed, 27 insertions, 27 deletions
diff --git a/api/rating.py b/api/rating.py
index 406969b..cfdf5e4 100644
--- a/api/rating.py
+++ b/api/rating.py
@@ -2,40 +2,40 @@ from db import cursor
def outcome(outcome_str, player_1):
- outcome_int = {"w": 1, "l": -1, "d": 0}[outcome_str]
- if not player_1: outcome_int *= -1
- return {1: "w", -1: "l", 0: "d"}[outcome_int]
+ outcome_int = {"w": 1, "l": -1, "d": 0}[outcome_str]
+ if not player_1: outcome_int *= -1
+ return {1: "w", -1: "l", 0: "d"}[outcome_int]
def rating_v1(won_games): # python is a garbage language
- return abs(won_games)**(1 / 2.2) * 23 * (1, -1)[won_games < 0]
+ return abs(won_games)**(1 / 2.2) * 23 * (1, -1)[won_games < 0]
def get_all_games(user_id):
- return cursor.execute("select player_1_id, player_2_id, outcome " + \
- "from games " + \
- "where (player_1_id = ? or player_2_id = ?) " + \
- "and status = \"finished\" or status = \"resign\"", [user_id, user_id]).fetchall()
+ return cursor.execute("select player_1_id, player_2_id, outcome " + \
+ "from games " + \
+ "where (player_1_id = ? or player_2_id = ?) " + \
+ "and status = \"finished\" or status = \"resign\"", [user_id, user_id]).fetchall()
# simple rating function that doesn't use game analysis
def get_rating(user_id):
- score = 400
- games = get_all_games(user_id)
- # get all games for user_id and switch perspective in which user_id is player_2_id
- mapped_games = [
- game if game[0] == user_id else
- (game[1], game[0], outcome(game[2], False)) for game in games
- ]
- counted_opponents = {}
- for game in mapped_games:
- # calculate sum score against user (+1 for win, -1 for lose, 0 for draw game)
- counted_opponents[game[1]] = (counted_opponents.get(game[1]) or 0) + {
- "w": 1,
- "l": -1,
- "d": 0
- }[game[2]]
- for opponent in counted_opponents:
- # apply the cool curve to the sum score and add to the base score of 400
- score += rating_v1(counted_opponents.get(opponent))
- return int(score)
+ score = 400
+ games = get_all_games(user_id)
+ # get all games for user_id and switch perspective in which user_id is player_2_id
+ mapped_games = [
+ game if game[0] == user_id else
+ (game[1], game[0], outcome(game[2], False)) for game in games
+ ]
+ counted_opponents = {}
+ for game in mapped_games:
+ # calculate sum score against user (+1 for win, -1 for lose, 0 for draw game)
+ counted_opponents[game[1]] = (counted_opponents.get(game[1]) or 0) + {
+ "w": 1,
+ "l": -1,
+ "d": 0
+ }[game[2]]
+ for opponent in counted_opponents:
+ # apply the cool curve to the sum score and add to the base score of 400
+ score += rating_v1(counted_opponents.get(opponent))
+ return int(score)