
About the Author Scott Hanselman works out of his home office for Microsoft as a Senior Program Manager, aiming to spread good information about developing software (usually on the Microsoft stack). Scott also maintains the enormously-popular Web site ComputerZen.com. |
Here’s the solution Scott Hanselman came up with for Event 7 in the Winter Scripting Games’ Advanced Division:
#this only works with an even number of teams
cls
[array]$global:games = $nul
function rotateArray($a)
{
$first, $rest = $a
$a = $rest + $first
return $a
}
function makeGames($a)
{
$i = 0;
while($i -lt $a.Length/2)
{
$global:games = $global:games + ($a[$i].ToString() + " vs. " + $a[$a.Length-1-$i].ToString())
$i++
}
}
$a = "A","B","C","D","E","F"
$z = 0
while($z -lt $a.Length-1)
{
makeGames($a)
# hold on to the first one
$first, $rest = $a
#rotate the rest
$rest = rotateArray($rest)
$a = [array]$first + $rest
$z++
}
#randomize games
$a = [collections.arraylist]$global:games
$r = $a.count..1 |% {$R = new-object random}{$R.next(0,$a.count) |%{$a[$_];$a.removeat($_)}}
$r