Идея подбора игроков сверху и снизу верна, но не вполне завершена. Выполнение одного раза отлично работает для первого раунда:
while (seeds.length)
{
firstRound.push(seeds.shift());
firstRound.push(seeds.pop());
}
1, 2, 3, 4, 5, 6, 7, 8 => 1, 8, 2, 7, 3, 6, 4, 5
... но во втором раунде семя 1 встречается с семенем 2, а 3 встречается с 4. Нам нужно делать первый / последний случай перемешивания для каждого раунда. В первый раз мы перемещаем каждый элемент индивидуально . Во второй раз мы перемещаем каждую ПАРУ элементов. В третий раз мы перемещаем групп по четыре и т. Д., Пока размер нашей группы не станет seeds.length/2
. Вот так:
// this is ruby, aka javascript psuedo-code :)
bracket_list = seeds.clone
slice = 1
while slice < bracket_list.length/2
temp = bracket_list
bracket_list = []
while temp.length > 0
bracket_list.concat temp.slice!(0, slice) # n from the beginning
bracket_list.concat temp.slice!(-slice, slice) # n from the end
end
slice *= 2
end
return bracket_list
Вот как будет выглядеть массив при прохождении итераций (круглые скобки указывают на увеличение размера группы):
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
(1, 16), (2, 15), (3, 14), (4, 13), (5, 12), (6, 11), (7, 10), (8, 9)
(1, 16, 8, 9), (2, 15, 7, 10), (3, 14, 6, 11), (4, 13, 5, 12)
(1, 16, 8, 9, 4, 13, 5, 12), (2, 15, 7, 10, 3, 14, 6, 11)
Так что теперь, после того, как 8 нижних игроков выбиты, у нас остается 1, 8, 4, 5, 2, 7, 3, 6
. После того, как нижние 4 устранены оттуда, у нас есть 1, 4, 2, 3
, а в последнем раунде просто 1, 2
.
Трудно объяснить это, не имея возможности нарисовать скобку ... Дайте мне знать, если я смогу кое-что прояснить для вас.