On Apr 14, 7:01 pm, Aaron Brady <[email protected]> wrote: > On Apr 14, 12:37 pm, Ross <[email protected]> wrote: > > > > > On Apr 14, 10:34 am, Ross <[email protected]> wrote: > > > > On Apr 14, 5:57 am, [email protected] (Aahz) wrote: > > > > > In article > > > > <[email protected]>, > > > > > Ross <[email protected]> wrote: > > > > >On Apr 13, 9:08=A0am, [email protected] (Aahz) wrote: > > > > >> In article > > > > >> <[email protected].= > > > > >com>, > > > > >> Ross =A0<[email protected]> wrote: > > > > > >>>I'm sorry...my example was probably a bad one. A better example of > > > > >>>output I would like would be something like [[1,2],[3,4],[5,6]] and > > > > >>>then for the leftovers list [7,8,9,10 etc]. What I'm trying to do is > > > > >>>produce some sort of round robin algorithm for tennis that is > > > > >>>constrained by the number of courts available each week. So if there > > > > >>>are only 3 courts available for a singles league and 10 people have > > > > >>>signed up, 4 players will have a bye each week. I want my algorithm > > > > >>>to > > > > >>>produce unique matchups each week and also give each player the same > > > > >>>angle? > > > > > >> How about Googling for "round robin algorithm python"? ;-) > > > > > >I have the basic algorithm and it works fine...I'm just having trouble > > > > >adding another parameter to it that allows for court constraints and > > > > >bye weeks. > > > > > You'll need to give us more information, then. Why don't you start with > > > > the core algorithm you're using? > > > > -- > > > > Aahz ([email protected]) <*> > > > > http://www.pythoncraft.com/ > > > > > Why is this newsgroup different from all other newsgroups? > > > > Here's the core algorithm I'm using: > > > > >>> def round_robin(teams,rounds): > > > > if len(teams)%2: > > > teams.append(None) > > > mid = len(teams) //2 > > > for i in range(rounds): > > > yield zip(teams[:mid], teams[mid:]) > > > teams = teams[0:1] + teams[mid:mid+1] + > > > teams[1:mid-1]+teams[mid > > > +1:]+teams[mid-1:mid] > > > > >>> if __name__== '__main__': > > > > rounds = 15 > > > teams = range(16) > > > for round in round_robin(teams,rounds): > > > print round > > > fyi rounds=15 and teams =range(16) was just test code I was playing > > around with...they could theoretically be anything. > > Here is an idea. Create a list of all possible pairs, using > itertools.combinations. You'll notice everyone gets equal play time > and equal time against each other on a pair-by-pair basis. Then, call > random.shuffle until one player isn't playing on two courts in one > day.
This might take a long time. Not that I can guarantee that a depth- first-search would be any faster, or that a breadth-first-search would run faster *and* run in available memory. <cough> -- http://mail.python.org/mailman/listinfo/python-list
