home *** CD-ROM | disk | FTP | other *** search
- From: jpn@genrad.com (John P. Nelson)
- Newsgroups: alt.sources,alt.sources.wanted,comp.lang.perl
- Subject: Re: Round Robin Tournament playoff scheduler wanted
- Message-ID: <39222@genrad.UUCP>
- Date: 24 Oct 90 15:41:59 GMT
-
- >Given a list of the names of the players in a tournament (such
- >as golf or chess) I'd like sources to a program which calculates
- >the number of rounds required and the pairs of players scheduled
- >to play during each round.
- >
- >CONDITIONS:
- >- Every player must play every other player exactly once.
- >- Every player must have an opponent during every round.
-
- I took a shot at this, and implemented it using "perl". Depending on
- how you invoke perl on your system, you may need to modify the first
- few lines of this script.
-
- #! /usr/local/perl
- # roundrobin - take a list of player names, and create a roundrobin
- # tournament where each player plays every other player
- # exactly once, and each player is active each round.
-
- # collect the names, one per line.
- $maxlen = 0;
- $phantom = "__phantom__";
- while (<>) {
- chop;
- push(players, $_);
- if (length > $maxlen) { $maxlen = length; }
- }
-
- die "Note enough players" if ($#players < 2);
- $format = sprintf("%%-%ds plays %%%ds\n", $maxlen, $maxlen);
-
- # make sure we have an even number of players.
- if (($#players & 1) == 0) {
- unshift(players, $phantom);
- }
-
- # make rotator with two arrays and a pivot
- $pivot = $players[0];
- @list1 = @players[1..(($#players-1)/2)];
- @list2 = @players[(($#players+1)/2)..$#players];
-
- # perform the round robin
- for ($i = 1; $i <= $#players; ++$i) {
- print "\n Round $i:\n";
- if ($pivot eq $phantom) { print "$list2[0] is idle\n"; }
- else { printf $format, $pivot, $list2[0]; }
-
- for ($j = 0; $j <= $#list1; ++$j) {
- printf $format, $list1[$j], $list2[$j+1];
- }
- # rotate the players
- $temp = shift(list2);
- unshift(list1, $temp);
- $temp = pop(list1);
- push(list2, $temp);
- }
-
- ---
- john nelson
-
- uucp: {decvax,mit-eddie}!genrad!jpn
- domain: jpn@genrad.com
-