Skip to content

Instantly share code, notes, and snippets.

@agriffis
Last active Apr 22, 2019
Embed
What would you like to do?
RIPUL 2019 scheduling
#!/usr/bin/env python3
from collections import defaultdict, namedtuple
import functools
from pprint import pformat, pprint
import sys
Y = 2019
N = 16
teams = list(range(N))
fields = """
LINCOLN Meadow
LINCOLN Tree
LINCOLN Turf
COLE Fence
COLE Berm
COLE Road
COLE Middle
COLE Tree
""".strip().split("\n")
dates = f"""
{Y}-05-27
{Y}-05-29
{Y}-06-03
{Y}-06-05
{Y}-06-10
{Y}-06-12
{Y}-06-17
{Y}-06-19
{Y}-06-24
{Y}-06-26
{Y}-07-01
{Y}-07-03
{Y}-07-08
{Y}-07-10
{Y}-07-15
{Y}-07-17
{Y}-07-22
{Y}-07-24
{Y}-07-29
{Y}-07-31
{Y}-08-05
{Y}-08-07
""".strip().split("\n")
#
# 1. MAKE THE SCHEDULE
#
def rotate(a, n=1):
n = n % len(a)
return a[-n:] + a[:-n]
def rotate_around(a, i, n=1):
around = a[i]
a = rotate(a[:i] + a[i + 1:], n)
a.insert(i, around)
return a
Match = namedtuple('Match', ['date', 'home', 'away', 'field'])
matches = []
# https://en.m.wikipedia.org/wiki/Round-robin_tournament#Scheduling_algorithm
for game, date in enumerate(dates):
circle = rotate_around(teams, 0, game)
home, away = circle[:N // 2], reversed(circle[N // 2:])
# Swap home/away each time, otherwise team 0 will always be home.
if game % 2:
home, away = away, home
matches.extend(Match(*m) for m in zip(
[date] * N,
home,
away,
# Since teams are rotating around the first team, rotate fields
# around the last field, otherwise the first team will always be on
# the first field.
rotate_around(
fields,
len(fields) - 1,
int(game * (2 + 1 / len(fields))),
),
))
#
# 2. ASSERTIONS
#
team_matches = {t: [m for m in matches if t in m] for t in teams}
team_opponents = {t: [m.home if m.away == t else m.away for m in team_matches[t]]
for t in teams}
# 2.1. Assert no team plays itself
assert all(t != o for t in teams for o in team_opponents[t])
# 2.2. Assert the first round is a proper round-robin
opponents_first_round = {t: set(team_opponents[t][:len(teams) - 1])
for t in teams}
assert opponents_first_round == {t: {o for o in teams if o != t}
for t in teams}
# 2.3. Assert the second round is unique teams
opponents_second_round = {t: set(team_opponents[t][len(teams) - 1:])
for t in teams}
assert all(len(opps) == len(dates) - len(teams) + 1
for opps in opponents_second_round.values())
#
# 3. DEBUG if "debug" on command-line
#
if len(sys.argv) > 1 and sys.argv[1] == 'debug':
games_at_field = {t: {f: sum(m.field == f for m in team_matches[t])
for f in fields}
for t in teams}
def loc(f):
return f.split()[0]
games_at_location = {t: {l: sum(loc(m.field) == l for m in team_matches[t])
for l in set(loc(f) for f in fields)}
for t in teams}
pprint(games_at_field)
pprint(games_at_location)
for m in matches:
print(f'{m.home} {m.away} {m.field}')
sys.exit(0)
#
# 4. SQL output
#
print(f"DELETE FROM games WHERE YEAR(date) = {Y};")
for m in matches:
print("INSERT INTO games (date, team1, team2, location) VALUES ('{}', {}, {}, '{}');"
.format(*m))
DELETE FROM games WHERE YEAR(date) = 2019;
INSERT INTO games (date, team1, team2, location) VALUES ('2019-05-27', 0, 15, 'LINCOLN Meadow');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-05-27', 1, 14, 'LINCOLN Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-05-27', 2, 13, 'LINCOLN Turf');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-05-27', 3, 12, 'COLE Fence');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-05-27', 4, 11, 'COLE Berm');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-05-27', 5, 10, 'COLE Road');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-05-27', 6, 9, 'COLE Middle');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-05-27', 7, 8, 'COLE Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-05-29', 14, 0, 'COLE Road');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-05-29', 13, 15, 'COLE Middle');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-05-29', 12, 1, 'LINCOLN Meadow');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-05-29', 11, 2, 'LINCOLN Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-05-29', 10, 3, 'LINCOLN Turf');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-05-29', 9, 4, 'COLE Fence');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-05-29', 8, 5, 'COLE Berm');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-05-29', 7, 6, 'COLE Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-03', 0, 13, 'COLE Fence');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-03', 14, 12, 'COLE Berm');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-03', 15, 11, 'COLE Road');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-03', 1, 10, 'COLE Middle');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-03', 2, 9, 'LINCOLN Meadow');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-03', 3, 8, 'LINCOLN Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-03', 4, 7, 'LINCOLN Turf');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-03', 5, 6, 'COLE Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-05', 12, 0, 'LINCOLN Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-05', 11, 13, 'LINCOLN Turf');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-05', 10, 14, 'COLE Fence');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-05', 9, 15, 'COLE Berm');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-05', 8, 1, 'COLE Road');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-05', 7, 2, 'COLE Middle');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-05', 6, 3, 'LINCOLN Meadow');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-05', 5, 4, 'COLE Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-10', 0, 11, 'COLE Middle');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-10', 12, 10, 'LINCOLN Meadow');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-10', 13, 9, 'LINCOLN Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-10', 14, 8, 'LINCOLN Turf');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-10', 15, 7, 'COLE Fence');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-10', 1, 6, 'COLE Berm');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-10', 2, 5, 'COLE Road');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-10', 3, 4, 'COLE Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-12', 10, 0, 'COLE Berm');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-12', 9, 11, 'COLE Road');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-12', 8, 12, 'COLE Middle');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-12', 7, 13, 'LINCOLN Meadow');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-12', 6, 14, 'LINCOLN Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-12', 5, 15, 'LINCOLN Turf');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-12', 4, 1, 'COLE Fence');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-12', 3, 2, 'COLE Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-17', 0, 9, 'LINCOLN Turf');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-17', 10, 8, 'COLE Fence');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-17', 11, 7, 'COLE Berm');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-17', 12, 6, 'COLE Road');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-17', 13, 5, 'COLE Middle');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-17', 14, 4, 'LINCOLN Meadow');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-17', 15, 3, 'LINCOLN Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-17', 1, 2, 'COLE Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-19', 8, 0, 'LINCOLN Meadow');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-19', 7, 9, 'LINCOLN Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-19', 6, 10, 'LINCOLN Turf');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-19', 5, 11, 'COLE Fence');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-19', 4, 12, 'COLE Berm');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-19', 3, 13, 'COLE Road');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-19', 2, 14, 'COLE Middle');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-19', 1, 15, 'COLE Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-24', 0, 7, 'COLE Berm');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-24', 8, 6, 'COLE Road');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-24', 9, 5, 'COLE Middle');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-24', 10, 4, 'LINCOLN Meadow');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-24', 11, 3, 'LINCOLN Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-24', 12, 2, 'LINCOLN Turf');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-24', 13, 1, 'COLE Fence');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-24', 14, 15, 'COLE Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-26', 6, 0, 'LINCOLN Turf');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-26', 5, 7, 'COLE Fence');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-26', 4, 8, 'COLE Berm');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-26', 3, 9, 'COLE Road');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-26', 2, 10, 'COLE Middle');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-26', 1, 11, 'LINCOLN Meadow');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-26', 15, 12, 'LINCOLN Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-06-26', 14, 13, 'COLE Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-01', 0, 5, 'LINCOLN Meadow');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-01', 6, 4, 'LINCOLN Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-01', 7, 3, 'LINCOLN Turf');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-01', 8, 2, 'COLE Fence');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-01', 9, 1, 'COLE Berm');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-01', 10, 15, 'COLE Road');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-01', 11, 14, 'COLE Middle');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-01', 12, 13, 'COLE Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-03', 4, 0, 'COLE Road');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-03', 3, 5, 'COLE Middle');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-03', 2, 6, 'LINCOLN Meadow');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-03', 1, 7, 'LINCOLN Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-03', 15, 8, 'LINCOLN Turf');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-03', 14, 9, 'COLE Fence');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-03', 13, 10, 'COLE Berm');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-03', 12, 11, 'COLE Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-08', 0, 3, 'COLE Fence');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-08', 4, 2, 'COLE Berm');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-08', 5, 1, 'COLE Road');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-08', 6, 15, 'COLE Middle');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-08', 7, 14, 'LINCOLN Meadow');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-08', 8, 13, 'LINCOLN Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-08', 9, 12, 'LINCOLN Turf');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-08', 10, 11, 'COLE Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-10', 2, 0, 'LINCOLN Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-10', 1, 3, 'LINCOLN Turf');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-10', 15, 4, 'COLE Fence');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-10', 14, 5, 'COLE Berm');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-10', 13, 6, 'COLE Road');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-10', 12, 7, 'COLE Middle');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-10', 11, 8, 'LINCOLN Meadow');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-10', 10, 9, 'COLE Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-15', 0, 1, 'COLE Middle');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-15', 2, 15, 'LINCOLN Meadow');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-15', 3, 14, 'LINCOLN Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-15', 4, 13, 'LINCOLN Turf');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-15', 5, 12, 'COLE Fence');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-15', 6, 11, 'COLE Berm');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-15', 7, 10, 'COLE Road');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-15', 8, 9, 'COLE Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-17', 15, 0, 'COLE Berm');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-17', 14, 1, 'COLE Road');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-17', 13, 2, 'COLE Middle');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-17', 12, 3, 'LINCOLN Meadow');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-17', 11, 4, 'LINCOLN Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-17', 10, 5, 'LINCOLN Turf');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-17', 9, 6, 'COLE Fence');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-17', 8, 7, 'COLE Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-22', 0, 14, 'LINCOLN Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-22', 15, 13, 'LINCOLN Turf');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-22', 1, 12, 'COLE Fence');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-22', 2, 11, 'COLE Berm');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-22', 3, 10, 'COLE Road');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-22', 4, 9, 'COLE Middle');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-22', 5, 8, 'LINCOLN Meadow');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-22', 6, 7, 'COLE Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-24', 13, 0, 'COLE Middle');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-24', 12, 14, 'LINCOLN Meadow');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-24', 11, 15, 'LINCOLN Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-24', 10, 1, 'LINCOLN Turf');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-24', 9, 2, 'COLE Fence');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-24', 8, 3, 'COLE Berm');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-24', 7, 4, 'COLE Road');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-24', 6, 5, 'COLE Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-29', 0, 12, 'COLE Berm');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-29', 13, 11, 'COLE Road');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-29', 14, 10, 'COLE Middle');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-29', 15, 9, 'LINCOLN Meadow');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-29', 1, 8, 'LINCOLN Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-29', 2, 7, 'LINCOLN Turf');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-29', 3, 6, 'COLE Fence');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-29', 4, 5, 'COLE Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-31', 11, 0, 'LINCOLN Turf');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-31', 10, 12, 'COLE Fence');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-31', 9, 13, 'COLE Berm');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-31', 8, 14, 'COLE Road');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-31', 7, 15, 'COLE Middle');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-31', 6, 1, 'LINCOLN Meadow');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-31', 5, 2, 'LINCOLN Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-07-31', 4, 3, 'COLE Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-08-05', 0, 10, 'LINCOLN Meadow');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-08-05', 11, 9, 'LINCOLN Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-08-05', 12, 8, 'LINCOLN Turf');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-08-05', 13, 7, 'COLE Fence');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-08-05', 14, 6, 'COLE Berm');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-08-05', 15, 5, 'COLE Road');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-08-05', 1, 4, 'COLE Middle');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-08-05', 2, 3, 'COLE Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-08-07', 9, 0, 'COLE Road');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-08-07', 8, 10, 'COLE Middle');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-08-07', 7, 11, 'LINCOLN Meadow');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-08-07', 6, 12, 'LINCOLN Tree');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-08-07', 5, 13, 'LINCOLN Turf');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-08-07', 4, 14, 'COLE Fence');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-08-07', 3, 15, 'COLE Berm');
INSERT INTO games (date, team1, team2, location) VALUES ('2019-08-07', 2, 1, 'COLE Tree');
{0: {'COLE Berm': 4,
'COLE Fence': 2,
'COLE Middle': 3,
'COLE Road': 3,
'COLE Tree': 0,
'LINCOLN Meadow': 4,
'LINCOLN Tree': 3,
'LINCOLN Turf': 3},
1: {'COLE Berm': 2,
'COLE Fence': 3,
'COLE Middle': 3,
'COLE Road': 3,
'COLE Tree': 3,
'LINCOLN Meadow': 3,
'LINCOLN Tree': 3,
'LINCOLN Turf': 2},
2: {'COLE Berm': 2,
'COLE Fence': 2,
'COLE Middle': 4,
'COLE Road': 1,
'COLE Tree': 4,
'LINCOLN Meadow': 3,
'LINCOLN Tree': 3,
'LINCOLN Turf': 3},
3: {'COLE Berm': 2,
'COLE Fence': 3,
'COLE Middle': 1,
'COLE Road': 3,
'COLE Tree': 4,
'LINCOLN Meadow': 2,
'LINCOLN Tree': 4,
'LINCOLN Turf': 3},
4: {'COLE Berm': 4,
'COLE Fence': 4,
'COLE Middle': 2,
'COLE Road': 2,
'COLE Tree': 4,
'LINCOLN Meadow': 2,
'LINCOLN Tree': 2,
'LINCOLN Turf': 2},
5: {'COLE Berm': 2,
'COLE Fence': 3,
'COLE Middle': 3,
'COLE Road': 4,
'COLE Tree': 4,
'LINCOLN Meadow': 2,
'LINCOLN Tree': 1,
'LINCOLN Turf': 3},
6: {'COLE Berm': 3,
'COLE Fence': 2,
'COLE Middle': 2,
'COLE Road': 3,
'COLE Tree': 4,
'LINCOLN Meadow': 3,
'LINCOLN Tree': 3,
'LINCOLN Turf': 2},
7: {'COLE Berm': 2,
'COLE Fence': 3,
'COLE Middle': 3,
'COLE Road': 2,
'COLE Tree': 4,
'LINCOLN Meadow': 3,
'LINCOLN Tree': 2,
'LINCOLN Turf': 3},
8: {'COLE Berm': 3,
'COLE Fence': 2,
'COLE Middle': 2,
'COLE Road': 3,
'COLE Tree': 3,
'LINCOLN Meadow': 3,
'LINCOLN Tree': 3,
'LINCOLN Turf': 3},
9: {'COLE Berm': 3,
'COLE Fence': 4,
'COLE Middle': 3,
'COLE Road': 3,
'COLE Tree': 2,
'LINCOLN Meadow': 2,
'LINCOLN Tree': 3,
'LINCOLN Turf': 2},
10: {'COLE Berm': 2,
'COLE Fence': 3,
'COLE Middle': 4,
'COLE Road': 4,
'COLE Tree': 2,
'LINCOLN Meadow': 3,
'LINCOLN Tree': 0,
'LINCOLN Turf': 4},
11: {'COLE Berm': 4,
'COLE Fence': 1,
'COLE Middle': 2,
'COLE Road': 3,
'COLE Tree': 2,
'LINCOLN Meadow': 3,
'LINCOLN Tree': 5,
'LINCOLN Turf': 2},
12: {'COLE Berm': 3,
'COLE Fence': 4,
'COLE Middle': 2,
'COLE Road': 1,
'COLE Tree': 2,
'LINCOLN Meadow': 4,
'LINCOLN Tree': 3,
'LINCOLN Turf': 3},
13: {'COLE Berm': 2,
'COLE Fence': 3,
'COLE Middle': 4,
'COLE Road': 3,
'COLE Tree': 2,
'LINCOLN Meadow': 1,
'LINCOLN Tree': 2,
'LINCOLN Turf': 5},
14: {'COLE Berm': 3,
'COLE Fence': 3,
'COLE Middle': 3,
'COLE Road': 3,
'COLE Tree': 2,
'LINCOLN Meadow': 3,
'LINCOLN Tree': 4,
'LINCOLN Turf': 1},
15: {'COLE Berm': 3,
'COLE Fence': 2,
'COLE Middle': 3,
'COLE Road': 3,
'COLE Tree': 2,
'LINCOLN Meadow': 3,
'LINCOLN Tree': 3,
'LINCOLN Turf': 3}}
{0: {'COLE': 12, 'LINCOLN': 10},
1: {'COLE': 14, 'LINCOLN': 8},
2: {'COLE': 13, 'LINCOLN': 9},
3: {'COLE': 13, 'LINCOLN': 9},
4: {'COLE': 16, 'LINCOLN': 6},
5: {'COLE': 16, 'LINCOLN': 6},
6: {'COLE': 14, 'LINCOLN': 8},
7: {'COLE': 14, 'LINCOLN': 8},
8: {'COLE': 13, 'LINCOLN': 9},
9: {'COLE': 15, 'LINCOLN': 7},
10: {'COLE': 15, 'LINCOLN': 7},
11: {'COLE': 12, 'LINCOLN': 10},
12: {'COLE': 12, 'LINCOLN': 10},
13: {'COLE': 14, 'LINCOLN': 8},
14: {'COLE': 14, 'LINCOLN': 8},
15: {'COLE': 13, 'LINCOLN': 9}}
0 15 LINCOLN Meadow
1 14 LINCOLN Tree
2 13 LINCOLN Turf
3 12 COLE Fence
4 11 COLE Berm
5 10 COLE Road
6 9 COLE Middle
7 8 COLE Tree
14 0 COLE Road
13 15 COLE Middle
12 1 LINCOLN Meadow
11 2 LINCOLN Tree
10 3 LINCOLN Turf
9 4 COLE Fence
8 5 COLE Berm
7 6 COLE Tree
0 13 COLE Fence
14 12 COLE Berm
15 11 COLE Road
1 10 COLE Middle
2 9 LINCOLN Meadow
3 8 LINCOLN Tree
4 7 LINCOLN Turf
5 6 COLE Tree
12 0 LINCOLN Tree
11 13 LINCOLN Turf
10 14 COLE Fence
9 15 COLE Berm
8 1 COLE Road
7 2 COLE Middle
6 3 LINCOLN Meadow
5 4 COLE Tree
0 11 COLE Middle
12 10 LINCOLN Meadow
13 9 LINCOLN Tree
14 8 LINCOLN Turf
15 7 COLE Fence
1 6 COLE Berm
2 5 COLE Road
3 4 COLE Tree
10 0 COLE Berm
9 11 COLE Road
8 12 COLE Middle
7 13 LINCOLN Meadow
6 14 LINCOLN Tree
5 15 LINCOLN Turf
4 1 COLE Fence
3 2 COLE Tree
0 9 LINCOLN Turf
10 8 COLE Fence
11 7 COLE Berm
12 6 COLE Road
13 5 COLE Middle
14 4 LINCOLN Meadow
15 3 LINCOLN Tree
1 2 COLE Tree
8 0 LINCOLN Meadow
7 9 LINCOLN Tree
6 10 LINCOLN Turf
5 11 COLE Fence
4 12 COLE Berm
3 13 COLE Road
2 14 COLE Middle
1 15 COLE Tree
0 7 COLE Berm
8 6 COLE Road
9 5 COLE Middle
10 4 LINCOLN Meadow
11 3 LINCOLN Tree
12 2 LINCOLN Turf
13 1 COLE Fence
14 15 COLE Tree
6 0 LINCOLN Turf
5 7 COLE Fence
4 8 COLE Berm
3 9 COLE Road
2 10 COLE Middle
1 11 LINCOLN Meadow
15 12 LINCOLN Tree
14 13 COLE Tree
0 5 LINCOLN Meadow
6 4 LINCOLN Tree
7 3 LINCOLN Turf
8 2 COLE Fence
9 1 COLE Berm
10 15 COLE Road
11 14 COLE Middle
12 13 COLE Tree
4 0 COLE Road
3 5 COLE Middle
2 6 LINCOLN Meadow
1 7 LINCOLN Tree
15 8 LINCOLN Turf
14 9 COLE Fence
13 10 COLE Berm
12 11 COLE Tree
0 3 COLE Fence
4 2 COLE Berm
5 1 COLE Road
6 15 COLE Middle
7 14 LINCOLN Meadow
8 13 LINCOLN Tree
9 12 LINCOLN Turf
10 11 COLE Tree
2 0 LINCOLN Tree
1 3 LINCOLN Turf
15 4 COLE Fence
14 5 COLE Berm
13 6 COLE Road
12 7 COLE Middle
11 8 LINCOLN Meadow
10 9 COLE Tree
0 1 COLE Middle
2 15 LINCOLN Meadow
3 14 LINCOLN Tree
4 13 LINCOLN Turf
5 12 COLE Fence
6 11 COLE Berm
7 10 COLE Road
8 9 COLE Tree
15 0 COLE Berm
14 1 COLE Road
13 2 COLE Middle
12 3 LINCOLN Meadow
11 4 LINCOLN Tree
10 5 LINCOLN Turf
9 6 COLE Fence
8 7 COLE Tree
0 14 LINCOLN Tree
15 13 LINCOLN Turf
1 12 COLE Fence
2 11 COLE Berm
3 10 COLE Road
4 9 COLE Middle
5 8 LINCOLN Meadow
6 7 COLE Tree
13 0 COLE Middle
12 14 LINCOLN Meadow
11 15 LINCOLN Tree
10 1 LINCOLN Turf
9 2 COLE Fence
8 3 COLE Berm
7 4 COLE Road
6 5 COLE Tree
0 12 COLE Berm
13 11 COLE Road
14 10 COLE Middle
15 9 LINCOLN Meadow
1 8 LINCOLN Tree
2 7 LINCOLN Turf
3 6 COLE Fence
4 5 COLE Tree
11 0 LINCOLN Turf
10 12 COLE Fence
9 13 COLE Berm
8 14 COLE Road
7 15 COLE Middle
6 1 LINCOLN Meadow
5 2 LINCOLN Tree
4 3 COLE Tree
0 10 LINCOLN Meadow
11 9 LINCOLN Tree
12 8 LINCOLN Turf
13 7 COLE Fence
14 6 COLE Berm
15 5 COLE Road
1 4 COLE Middle
2 3 COLE Tree
9 0 COLE Road
8 10 COLE Middle
7 11 LINCOLN Meadow
6 12 LINCOLN Tree
5 13 LINCOLN Turf
4 14 COLE Fence
3 15 COLE Berm
2 1 COLE Tree
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment