Code works fine except...

Ross ross.jett at gmail.com
Sun May 3 22:36:35 EDT 2009


For the past couple weeks, I've been working on an algorithm to
schedule tennis leagues given court constraints and league
considerations (i.e. whether it's a singles or a doubles league). Here
were my requirements when I was designing this algorithm:

-Each player plays against a unique opponent each week.
-Similarly, in a doubles league, each player plays with a unique
partner each week.
-Each player gets a fair number of bye weeks (i.e. the player with the
most bye weeks will have no more than one bye week than the player
with the least number of bye weeks)

I'm very close to arriving at my desired solution, but I have one
glaring flaw. When I have an even number of players sign up for my
league and there are court constraints, my current algorithm gives the
first player in my league a bye week every single week. I'll post my
code below and see how you guys think I should add to/ amend my code.

def round_robin(players, rounds):
    if len(players)%2:
	players.insert(0, None)
    mid = len(players)//2
    for i in range(rounds):
	yield zip(players[:mid], players[mid:])
	players = players[0:1] + players[mid:mid+1] + players[1:mid-1] +
players[mid+1:] + players[mid-1:mid]


def test_round_robin(players, rounds, courts, doubles = False):
    players = range(players)
    for week in round_robin(players,rounds,courts):
	    if doubles == True:
		    doubles_week = len(week)/2.0
		    byes = doubles_week - courts
		    if byes == 0:
			    bye_list = []
		    else:
			    bye_list = week[::int(round(1.072*(courts/byes)+1.08))]
		    playing = [u for u in week if u not in bye_list]
		    midd = len(playing)//2
		    doub_sched = zip(playing[:midd], playing[midd:])
		    print doub_sched, bye_list
	    else:
		    byes = len(week)- courts
		    if byes == 0:
			    bye_list = []
		    else:
			    bye_list = week[::int(round(1.072*(courts/byes)+1.08))]
		    playing = [u for u in week if u not in bye_list]
		    print playing, bye_list



More information about the Python-list mailing list