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
In reply to Re: Algorithm problem: Order matches by difference between players
by wind
in thread Algorithm problem: Order matches by difference between players
by Dirk80
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |