対戦相手のシードのリスト (たとえば、シード 1 から 16) が与えられた場合、そのラウンドでトップシードが最下位シードと対戦し、2 番目のシードが 2 番目に低いシードと対戦する、という結果になるアルゴリズムを記述しようとしています。
1 と 16、2 と 15 などを「マッチ」にグループ化するのはかなり簡単ですが、後続のラウンドで上位シードが下位シードと対戦することも確認する必要があります。
正しい配置のブラケットの例:
1対16 1対8 8対9 1対4 4対13 4対5 5対12 1対2 2対15 2対7 7対10 2対3 3対14 3対6 6対11
ご覧のとおり、シード 1 と 2 は決勝でのみ対戦します。
ベストアンサー1
このJavaScriptは、各偶数インデックスが次の奇数インデックスを再生する配列を返します。
function seeding(numPlayers){
var rounds = Math.log(numPlayers)/Math.log(2)-1;
var pls = [1,2];
for(var i=0;i<rounds;i++){
pls = nextLayer(pls);
}
return pls;
function nextLayer(pls){
var out=[];
var length = pls.length*2+1;
pls.forEach(function(d){
out.push(d);
out.push(length-d);
});
return out;
}
}
> seeding(2)
[1, 2]
> seeding(4)
[1, 4, 2, 3]
> seeding(8)
[1, 8, 4, 5, 2, 7, 3, 6]
> seeding(16)
[1, 16, 8, 9, 4, 13, 5, 12, 2, 15, 7, 10, 3, 14, 6, 11]