Round-robins the easy way
Posted: Fri Oct 10, 2014 2:45 pm
I don't think this is documented anywhere, so I'm putting it up for anyone's reference.
It's trivial to generate round-robin schedules using Excel or another spreadsheet application (Google Spreadsheet, etc.). This serves the dual purpose of ensuring accuracy (as opposed to pulling from a random site) and making sure that teams are "balanced" in rooms.
I'll refer to this spreadsheet, which should be pretty self-explanatory, for the rest of this post.
The first steps are to generate a round-robin using the pivot-method documented on Wikipedia and other places. This is easy to understand on paper and is super easy to generate in a spreadsheet.
First, divide the number of teams by 2: this is the number of rooms you need. If you have an odd number of teams, add 1 before dividing by two; the additional team will be the "BYE". To do this quickly, you'll need 2 columns per room (each column being 1 team in the match). So columns should = number of teams, with each team assigned a number 1 to {number of teams} somewhere else.
In the second column, count down from the number of teams (this including the additional team for an odd number of teams) to 2; in our case, we simply do {last team} then {last team – 1} and drag down the rest of the way. Populate the first column with 1s commensurate with the rows you needed to get to 2. This is also the number of rounds you'll need.
Copy from the column w/ number of teams through 2; distribute across columns as shown in the "9 Teams" sheet (first: diagonally right; then: diagonally left). The last room should always have the last team twice in a row, around {half teams + 1} rounds into the schedule, or so.
Now chop off everything below 1 v 2 and fill in everything about the last team (going up: 2, 3, 4…{last team – 1}) as necessary. Every number should appear once in a row and, except for 1, appear once in a column (twice in a room); if this isn't the case, you've done something wrong.
This completes generation of the schedule; now comes room balancing.
For an odd number of teams (where the last team is a bye), getting a balanced schedule for rooms is easy: switch all the "x v 10" with "1 v y". Whoever was playing 10 for a given round now has the bye. This usually goes 1, {last team - 2}, {last team - 4}, .., {last team - 1}, {last team - 3}, ... or some such discernible pattern.
For an even number of teams, you want to find switches where switching "1 v x" into a room doesn't create situation where a team is in a non-first room more than twice. These occur in pairs.
For instance, the following usually holds:
– Switch the first and last "1 v x" (i.e. 1 v {last team} and 1 v 2) rounds with the room to the right, then (for more than 4 teams):
– Switch the middle "1 v x" (i.e. 1 v {last team / 2 + 1}) with the last room, then (for more than 6 teams):
– Switch the "1 v x" above and below the middle "1 v x" with the matches two rooms to the right, then (for more than 8 teams):
– Switch the "1 v x" above and below the first/last "1 v x" with the matches three rooms to the right, then (for more than 10 teams):
– Etc.
You can see this process on the '10 Team' sheet, with switches illustrated by bolding.
The first room should have two or so teams 3 times, and the last room will only see team 1 once, but this is pretty much as room-balanced as you can get.
Lastly, you can use the concatenate function to make a table that's easily pasted into Word. (=CONCATENATE(A1, " v ", B1), for instance).
These instructions are kind of long, but it's really quite easy once you've done it once or twice.
It's trivial to generate round-robin schedules using Excel or another spreadsheet application (Google Spreadsheet, etc.). This serves the dual purpose of ensuring accuracy (as opposed to pulling from a random site) and making sure that teams are "balanced" in rooms.
I'll refer to this spreadsheet, which should be pretty self-explanatory, for the rest of this post.
The first steps are to generate a round-robin using the pivot-method documented on Wikipedia and other places. This is easy to understand on paper and is super easy to generate in a spreadsheet.
First, divide the number of teams by 2: this is the number of rooms you need. If you have an odd number of teams, add 1 before dividing by two; the additional team will be the "BYE". To do this quickly, you'll need 2 columns per room (each column being 1 team in the match). So columns should = number of teams, with each team assigned a number 1 to {number of teams} somewhere else.
In the second column, count down from the number of teams (this including the additional team for an odd number of teams) to 2; in our case, we simply do {last team} then {last team – 1} and drag down the rest of the way. Populate the first column with 1s commensurate with the rows you needed to get to 2. This is also the number of rounds you'll need.
Copy from the column w/ number of teams through 2; distribute across columns as shown in the "9 Teams" sheet (first: diagonally right; then: diagonally left). The last room should always have the last team twice in a row, around {half teams + 1} rounds into the schedule, or so.
Now chop off everything below 1 v 2 and fill in everything about the last team (going up: 2, 3, 4…{last team – 1}) as necessary. Every number should appear once in a row and, except for 1, appear once in a column (twice in a room); if this isn't the case, you've done something wrong.
This completes generation of the schedule; now comes room balancing.
For an odd number of teams (where the last team is a bye), getting a balanced schedule for rooms is easy: switch all the "x v 10" with "1 v y". Whoever was playing 10 for a given round now has the bye. This usually goes 1, {last team - 2}, {last team - 4}, .., {last team - 1}, {last team - 3}, ... or some such discernible pattern.
For an even number of teams, you want to find switches where switching "1 v x" into a room doesn't create situation where a team is in a non-first room more than twice. These occur in pairs.
For instance, the following usually holds:
– Switch the first and last "1 v x" (i.e. 1 v {last team} and 1 v 2) rounds with the room to the right, then (for more than 4 teams):
– Switch the middle "1 v x" (i.e. 1 v {last team / 2 + 1}) with the last room, then (for more than 6 teams):
– Switch the "1 v x" above and below the middle "1 v x" with the matches two rooms to the right, then (for more than 8 teams):
– Switch the "1 v x" above and below the first/last "1 v x" with the matches three rooms to the right, then (for more than 10 teams):
– Etc.
You can see this process on the '10 Team' sheet, with switches illustrated by bolding.
The first room should have two or so teams 3 times, and the last room will only see team 1 once, but this is pretty much as room-balanced as you can get.
Lastly, you can use the concatenate function to make a table that's easily pasted into Word. (=CONCATENATE(A1, " v ", B1), for instance).
These instructions are kind of long, but it's really quite easy once you've done it once or twice.