Recently I found it useful to implement a round-robin tournament. Here’s a little Python generator that produces schedules for you, for your enjoyment.
from collections import deque
def round_robin(size):
if size < 2:
yield []
raise StopIteration
teams = range(1, size)
rounds = size - 1
if size % 2:
teams.append(None)
rounds = rounds + 1
roster = deque(teams)
half = (len(roster) + 1)/2
for round in range(rounds):
positions = [0] + list(roster)
backwards = positions[::-1]
yield [(positions[i], backwards[i]) for i in range(half)]
roster.rotate()