Files
bracket/main.py
rconnorjohnstone 0ee953ae69 Added a readme
2021-03-17 13:48:28 -06:00

70 lines
2.8 KiB
Python

import csv
from statistics import mean
rankings_file = 'rankings.csv'
matchups_file = 'matchups.csv'
# Some rounds modified to measure expectations better
r1_seeds = [[1,28], [8,9], [5, 12], [4,16], [6,11], [3,18], [7,10], [2,24]]
r2_seeds = [[1,10], [5,4], [6,3], [9,2]]
r3_seeds = [[1,4], [3,2]]
r4_seeds = [[1,4], [3,2]]
r5_seeds = [[1,4], [3,2]]
r6_seeds = [[1,2]]
systems = ['LEF', 'DOK', 'INC', 'LMC', 'TPR']
def pick_winners(matchups, seeds, multiplier):
j = 0
winners = []
out_matchups = []
for matchup in matchups:
if matchup != []:
expected_ranks = [ multiplier*seed for seed in seeds[j%len(seeds)] ]
matchup_rankings = [rankings[teams.index(matchup[0])], rankings[teams.index(matchup[1])]]
for k in range(2):
if matchup_rankings[k] < 0.75*expected_ranks[k]:
matchup_rankings[k] *= 0.5
elif matchup_rankings[k] < expected_ranks[k]:
matchup_rankings[k] *= 0.9
elif matchup_rankings[k] > 1.5*expected_ranks[k]:
matchup_rankings[k] *= 2.5
elif matchup_rankings[k] > expected_ranks[k]:
matchup_rankings[k] *= 1.1
if matchup_rankings[0] >= matchup_rankings[1]:
winner = matchup[1]
else:
winner = matchup[0]
winners.append(winner)
j += 1
for i in range(0,len(winners), 2):
out_matchups.append([ winners[i], winners[i+1] ])
print(winners)
return winners, out_matchups
def convert_float(string): return 400 if (string.strip() == '') else float(string)
with open(rankings_file, newline='\n') as rankings_csv:
reader = csv.reader(rankings_csv, delimiter=',', quotechar='"')
teams = []
rankings = []
for team in reader:
if team[0] == "Team":
sys_indices = []
for system in systems: sys_indices.append([ sys.strip() for sys in team ].index(system))
else:
rankings.append(mean([ convert_float(team[sys_index]) for sys_index in sys_indices ]))
teams.append(team[0].strip())
with open(matchups_file, newline='\n') as matchups_csv:
reader = csv.reader(matchups_csv, delimiter=',', quotechar='"')
r2_teams, r2_matchups = pick_winners(reader, r1_seeds, 4)
r3_teams, r3_matchups = pick_winners(r2_matchups, r2_seeds, 4)
r4_teams, r4_matchups = pick_winners(r3_matchups, r3_seeds, 4)
r5_teams, r5_matchups = pick_winners(r4_matchups, r4_seeds, 2)
r6_teams, r6_matchups = pick_winners(r5_matchups, r5_seeds, 1)
final_rankings = [rankings[teams.index(r6_matchups[0][0])], rankings[teams.index(r6_matchups[0][1])]]
winner = r6_matchups[0][1] if (final_rankings[0] >= final_rankings[1]) else r6_matchups[0][0]
print(winner)