in reply to Algorithm problem: Order matches by difference between players
To solve this problem assign the first seed to play last seeded player in the first round and against a higher seed each subsequent round.
Then simply rely on the round-robin algorithm of rotating an array's values while keeping one static to ensure that everyone plays against each other:
use strict; use warnings; my $num_players = 6; my @players = (1..$num_players); push @players, 'bye' if @players % 2; # Even number my $num_rounds = @players - 1; for my $round (1..$num_rounds) { # Fold array to assign matches my @matches = map {join('-', sort @players[$_, $#players - $_])} ( +0..@players/2-1); # Print Results print "$round) " . join(', ', @matches), "\n"; # Rotate last position to second splice @players, 1, 0, pop(@players); }
Results:
This works with any number of players and rounds.1) 1-6, 2-5, 3-4 2) 1-5, 4-6, 2-3 3) 1-4, 3-5, 2-6 4) 1-3, 2-4, 5-6 5) 1-2, 3-6, 4-5
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Algorithm problem: Order matches by difference between players
by Dirk80 (Pilgrim) on Apr 18, 2011 at 20:32 UTC | |
by wind (Priest) on Apr 18, 2011 at 20:53 UTC | |
by Ghalko (Novice) on Apr 18, 2011 at 21:29 UTC | |
by LanX (Saint) on Apr 18, 2011 at 23:00 UTC |