-
Notifications
You must be signed in to change notification settings - Fork 1
/
lineups.py
109 lines (99 loc) · 2.53 KB
/
lineups.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
#!/bin/python
# Sort the players by position
def getPositions(players):
pgs = []
pfs = []
sgs = []
sfs = []
cs = []
for key in players:
pos = players[key].POS
if pos == 'PG':
pgs.append(players[key])
elif pos == 'PF':
pfs.append(players[key])
elif pos == 'SG':
sgs.append(players[key])
elif pos == 'SF':
sfs.append(players[key])
elif pos == 'C':
cs.append(players[key])
return pgs, sgs, sfs, pfs, cs
# Sort players by points/cost
def sortEff(players):
return sorted(players, key=lambda x: x.EFF, reverse=True)
# Check each possible lineup and save the score
def getOptions(pgs, pfs, sgs, sfs, cs):
budget = 60
options = []
for l in range(len(pgs)):
for m in range(1,len(pgs)):
if l >= m:
continue
for n in range(len(sgs)):
for o in range(1,len(sgs)):
if n >= o:
continue
for p in range(len(sfs)):
for q in range(1,len(sfs)):
if p >= q:
continue
for r in range(len(pfs)):
for s in range(1,len(pfs)):
if r >= s:
continue
for t in range(len(cs)):
cost = (
pgs[l].SALARY +
pgs[m].SALARY +
sgs[n].SALARY +
sgs[o].SALARY +
sfs[p].SALARY +
sfs[q].SALARY +
pfs[r].SALARY +
pfs[s].SALARY +
cs[t].SALARY
)
if cost < budget:
score = (
pgs[l].SCORE +
pgs[m].SCORE +
sgs[n].SCORE +
sgs[o].SCORE +
sfs[p].SCORE +
sfs[q].SCORE +
pfs[r].SCORE +
pfs[s].SCORE +
cs[t].SCORE
)
names = (
pgs[l].NAME,
pgs[m].NAME,
sgs[n].NAME,
sgs[o].NAME,
sfs[p].NAME,
sfs[q].NAME,
pfs[r].NAME,
pfs[s].NAME,
cs[t].NAME
)
options.append((names, score))
return options
def run(players):
pgs, sgs, sfs, pfs, cs = getPositions(players)
pgs = sortEff(pgs)
pfs = sortEff(pfs)
sgs = sortEff(sgs)
sfs = sortEff(sfs)
cs = sortEff(cs)
m = 0
n = 9 # limited samples for speed
options = getOptions(pgs[m:n], sgs[m:n], sfs[m:n], pfs[m:n], cs[m:n])
## Return single best team
#scores = [option[1] for option in options]
#best = max(scores)
#bestIdx = [n for n,m in enumerate(scores) if m == best]
#return [options[n] for n in bestIdx]
## Return a set of the best teams
options = sorted(options, key=lambda x: x[1], reverse=True)
return options[0:5]