Matt Weiner is working on a similar project, at least with respect to schedule templates. You should have a chat with him.The Predictable Consequences wrote:What would be really awesome would be to create a set of public schedules for common field sizes where all a TD would have to do is change a list of teams and rooms to the actual teams and rooms and it would auto-populate a schedule. I'll try and make a small version of what I'm envisioning later tonight.
The Predictable Consequences wrote:What would be really awesome would be to create a set of public schedules for common field sizes where all a TD would have to do is change a list of teams and rooms to the actual teams and rooms and it would auto-populate a schedule. I'll try and make a small version of what I'm envisioning later tonight.
The Predictable Consequences wrote:What would be really awesome would be to create a set of public schedules for common field sizes where all a TD would have to do is change a list of teams and rooms to the actual teams and rooms and it would auto-populate a schedule.
I don't like these schedules for two reasons.Hidehiro Anto wrote:Personally, I'm just using Jonah's LaTeX schedules, and editing them to my needs. However, this requires both LaTeX software (free to download) and knowledge of the LaTeX language (which I don't have, I'm just learning as I go).
https://github.com/jonahgreenthal/qbschedule
http://latex-project.org/ftp.html
Cody wrote:Secondarily, they don't cover nearly the formats that need to be covered. Compare the available schedules to this list I just generated. (there may be some mistakes as this was a quick effort). It's far easier to generate a schedule yourself and paste the table into Word (or convert to LaTeX using http://www.tablesgenerator.com if you're into that sort of thing).
This is some hot stuff.cvdwightw wrote:This spreadsheet I made a while ago covers basically every single one of those formats you listed except the ones requiring wild-card tiebreakers, plus suggested formats for 25-36 teams given 13 non-finals non-tiebreaker packets, plus schedules for as many numbers of teams between 37 and 48 as I could figure out.
def roundRobin(teamCount):
"""Input # of teams as an integer, n. Output is the schedule as a list of lists of lists: list of n - 1 rounds (n rounds for n % 2 == 1), each of which is a list of n / 2 pairings ([n + 1] / 2 pairings for n % 2 == 1), each of which has 1 element iff bye and 2 elements iff match."""
if teamCount % 2 != 0:
bye = True
teamCount = teamCount + 1
teams = list(range(teamCount))
else:
bye = False
teams = list(range(1, teamCount+1))
halfCount = teamCount // 2
roundCount = teamCount - 1
schedule = []
for x in range(roundCount):
round = []
for y in range(halfCount):
if teams[y] == 0:
round.insert(0,[teams[teamCount-y-1]])
elif teams[teamCount-y-1] == 0:
round.insert(0,[teams[y]])
else:
"""sorted() ensures that format is smaller no. v bigger no., useful when combined with alphabetized brackets later"""
round.append(sorted([teams[y], teams[teamCount-y-1]]))
if bye:
"""fix team 0 (bye), rotate all other by one position"""
teams.insert(1, teams.pop())
elif teamCount % 3 != 1:
for y in range(halfCount-1):
"""fix team 1, rotate all others by n / 2 - 1 positions"""
teams.insert(1, teams.pop())
if x < halfCount-1:
"""for rounds 1 to n / 2 - 1, switch room 1 and room # matching round #"""
round[0], round[x+1] = round[x+1], round[0]
elif x < roundCount:
"""for rounds n / 2 to n - 1, switch room 1 and room # matching n - round #"""
round[0], round[roundCount-x-1] = round[roundCount-x-1], round[0]
else:
#give up, use my heuristic
teams.insert(1, teams.pop())
if x == 0 or x == roundCount-1:
round[0], round[1] = round[1], round[0]
if teamCount > 4:
if x == halfCount-1:
round[0], round[halfCount-1] = round[halfCount-1], round[0]
elif x == halfCount-2 or x == halfCount:
round[0], round[2] = round[2], round[0]
elif x == 1 or x == roundCount-2:
round[0], round[3] = round[3], round[0]
if teamCount > 10:
if x == halfCount-3 or x == halfCount+1:
round[0], round[4] = round[4], round[0]
elif x == 2 or x == roundCount-3:
round[0], round[5] = round[5], round[0]
elif x == halfCount-4 or x == halfCount+2:
round[0], round[6] = round[6], round[0]
schedule.append(round)
return schedule
Return to Databases and Quizbowl Software
Users browsing this forum: No registered users and 1 guest