-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.py
121 lines (108 loc) · 3.47 KB
/
utils.py
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import math
from models import PlayerModel, GameModel
PLAYER_A = 1
PLAYER_B = 2
#TODO: use this http://elo.divergentinformatics.com/ (or something like it)
def calculate_elo_rank(player_a_rank=1600, player_b_rank=1600, winner=PLAYER_A, penalize_loser=True):
if winner is PLAYER_A:
winner_rank, loser_rank = player_a_rank, player_b_rank
else:
winner_rank, loser_rank = player_b_rank, player_a_rank
rank_diff = winner_rank - loser_rank
exp = (rank_diff * -1) / 400
odds = 1 / (1 + math.pow(10, exp))
if winner_rank < 2100:
k = 32
elif winner_rank >= 2100 and winner_rank < 2400:
k = 24
else:
k = 16
# Triple the points baby (doesn't really work)
new_winner_rank = round(winner_rank + (k * (1 - odds)))
if penalize_loser:
# Triple the points baby (doesn't really work)
new_rank_diff = new_winner_rank - winner_rank
new_loser_rank = loser_rank - new_rank_diff
else:
new_loser_rank = loser_rank
if new_loser_rank < 1:
new_loser_rank = 1
if new_loser_rank < 100:
new_loser_rank = 100
if winner is PLAYER_A:
return (new_winner_rank, new_loser_rank)
return (new_loser_rank, new_winner_rank)
def get_ladder():
import datetime
a=PlayerModel.query()
a=a.order(-PlayerModel.skillScore)
b=PlayerModel.query()
lastweek = datetime.datetime.now() - datetime.timedelta(days=7)
b=b.filter(PlayerModel.lastGame > lastweek)
return (a, b)
def calculate_score_from_post(request):
game1 = GameModel()
game2 = GameModel()
game3 = GameModel()
if "game1" in request.POST.keys():
winners = [request.POST['game1'],
request.POST['game2'],
request.POST['game3']]
if winners[0] == "player1":
game1.player1 = 5
game1.player2 = 0
else:
game1.player2 = 5
game1.player1 = 0
if winners[1] == "player1":
game2.player1 = 5
game2.player2 = 0
else:
game2.player2 = 5
game2.player1 = 0
if winners[2] == "player1":
game3.player1 = 5
game3.player2 = 0
else:
game3.player2 = 5
game3.player1 = 0
else:
game1.player1 = int(request.POST['p1g1'])
game1.player2 = int(request.POST['p2g1'])
game2.player1 = int(request.POST['p1g2'])
game2.player2 = int(request.POST['p2g2'])
game3.player1 = int(request.POST['p1g3'])
game3.player2 = int(request.POST['p2g3'])
return [game1, game2, game3]
#name=a.first_name, last=a.last_name,skill=a.skillScore, wins=a.gamesWon, loses=(a.gamesPlayed - a.gamesWon)
def calculate_winner(p1_score, p2_score):
if p1_score > p2_score:
return "player1"
elif p2_score > p1_score:
return "player2"
else:
return "tied"
def number_to_word(number):
if number > 9 or number < 0:
return number
else:
if number == 0:
return "zero"
elif number == 1:
return "one"
elif number == 2:
return "two"
elif number == 3:
return "three"
elif number == 4:
return "four"
elif number == 5:
return "five"
elif number == 6:
return "six"
elif number == 7:
return "seven"
elif number == 8:
return "eight"
elif number == 9:
return "nine"