我有玩家列表,想用 JavaScript 为国际象棋锦标赛创建一个循环生成器。循环赛应该像这张图片一样,显示 10 支球队和 6 支球队:
我试图为偶数和奇数整数创建单独的逻辑,但我没有找到最好的算法:
var list = [1,2,3,4,5,6,7,8,9,10];
var pairing = []
var size = list.length;
var halfSize = size/2;
var evenOrOdd
if (halfSize % 2 != 1) {
list.push("BYE")
}
for (var i=0 ; i <= size-1 ; i++) {
var lastOne = list[size]
if (isEven(i)) {
var games = []
for (var j = 0; j <= halfSize-1; j++) {
if (j == 0) {
games.push({"home": list[size-1], "away": list[(i+2)/2-1+j]})
} else {
if(list[size-j-i/2]==list[size-2] && i>0){
games.push({"home": list[j+i/2], "away": list[0]})
} else {
games.push({"home": list[j+i/2], "away": list[(i+2)/2]})
}
}
}
pairing.push({"round":i+1,"games":games})
} else {
}
}
console.log(pairing)
function isEven(num) {
if (num % 2 == 0)
return true;
return false;
}
我得到的结果不像上图中的配对,它只正确产生了第一轮。
还有一些其他类似的问题有答案,例如循环赛的调度算法?,但它们是用于足球比赛的,我希望它用于国际象棋比赛:与足球相比,它有一些不同。
如何更正我的国际象棋锦标赛生成器,使其适用于任意数量的玩家?