我正在制定联赛时间表,但我一直坚持在任何给定的一周内,一支球队应该只参加一次比赛。
到目前为止,我已经确定了正确的比赛场数,并且每支球队都与他们的同盟对手交手 4 次,与他们的跨区对手交手 2 次。这是我为此编写的代码:
let easternConfTeams = [a, b, c, d, e, f];
let westernConfTeams = [g, h, i, j, k, l];
const teamPool = [...easternConfTeams, ...westernConfTeams];
let schedule = teamPool.reduce((a, v, i) => {
for (let j = i + 1; j < teamPool.length; j++) {
if (i < 6) {
if (j < 6) {
a.push(`${v} : ${teamPool[j]}`);
a.push(`${v} : ${teamPool[j]}`);
a.push(`${v} : ${teamPool[j]}`);
a.push(`${v} : ${teamPool[j]}`);
} else {
a.push(`${v} : ${teamPool[j]}`);
a.push(`${v} : ${teamPool[j]}`);
}
} else {
if (j < 6) {
a.push(`${v} : ${teamPool[j]}`);
a.push(`${v} : ${teamPool[j]}`);
} else {
a.push(`${v} : ${teamPool[j]}`);
a.push(`${v} : ${teamPool[j]}`);
a.push(`${v} : ${teamPool[j]}`);
a.push(`${v} : ${teamPool[j]}`);
}
}
}
return a;
}, []);
然后我通过一个 shuffle 函数运行它:
shuffle = (schedule) => {
let currentIndex = schedule.length,
temporaryValue, randomIndex;
// While there remain elements to shuffle...
while (0 !== currentIndex) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
// And swap it with the current element.
temporaryValue = schedule[currentIndex];
schedule[currentIndex] = schedule[randomIndex];
schedule[randomIndex] = temporaryValue;
}
return schedule;
};
然而,我被困在最后一块,即将这个游戏时间表变成单独的几周。由于有 12 支球队,本赛季每周应该有 6 场比赛——在这 6 场比赛中,没有球队应该出现两次。换句话说,每支球队都应该每周打一场,但只能打一次。
总共有192场比赛,需要分成32周,每场6场。
我怎么能确保这一点?