88 lines
3.0 KiB
Python
88 lines
3.0 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 = ["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][1:] == '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)
|