我正在尝试创建一个由 36 支球队参加的第 24 届欧洲冠军联赛“瑞士模式”比赛。每支队伍将与 8 位不同的对手进行比赛,总共进行 144 场比赛。我已经创建了一个匹配列表。有没有办法对每场比赛进行排序,以便每支球队的主客场比赛数量相同(本例中为 4 场)?比赛中的第一个位置表示主队,第二个位置表示客队。
我试图检查一线队的主场比赛总数是否超过4场(因为有8轮)。如果是这样,则成为客队。然而,结果仍然分布不均。
const matchups = [
[
"35",
"36"
],
[
"36",
"34"
],
[
"12",
"36"
],
[
"36",
"28"
],
[
"36",
"3"
],
[
"36",
"19"
],
[
"36",
"16"
],
[
"36",
"14"
],
[
"13",
"20"
],
[
"12",
"13"
],
[
"13",
"27"
],
[
"7",
"13"
],
[
"1",
"13"
],
[
"21",
"13"
],
[
"35",
"13"
],
[
"13",
"15"
],
[
"37",
"3"
],
[
"21",
"37"
],
[
"54",
"37"
],
[
"11",
"37"
],
[
"37",
"27"
],
[
"1",
"37"
],
[
"37",
"14"
],
[
"22",
"37"
],
[
"15",
"17"
],
[
"11",
"15"
],
[
"15",
"27"
],
[
"1",
"15"
],
[
"15",
"54"
],
[
"41",
"15"
],
[
"40",
"15"
],
[
"23",
"1"
],
[
"40",
"23"
],
[
"25",
"23"
],
[
"24",
"23"
],
[
"41",
"23"
],
[
"23",
"3"
],
[
"23",
"9"
],
[
"18",
"23"
],
[
"41",
"27"
],
[
"27",
"54"
],
[
"40",
"27"
],
[
"27",
"18"
],
[
"27",
"19"
],
[
"7",
"3"
],
[
"33",
"3"
],
[
"32",
"3"
],
[
"2",
"3"
],
[
"3",
"54"
],
[
"41",
"29"
],
[
"40",
"29"
],
[
"29",
"28"
],
[
"2",
"29"
],
[
"10",
"29"
],
[
"26",
"29"
],
[
"12",
"29"
],
[
"29",
"22"
],
[
"25",
"34"
],
[
"34",
"24"
],
[
"10",
"34"
],
[
"34",
"16"
],
[
"11",
"34"
],
[
"48",
"34"
],
[
"34",
"17"
],
[
"14",
"24"
],
[
"14",
"9"
],
[
"33",
"14"
],
[
"25",
"14"
],
[
"7",
"14"
],
[
"14",
"17"
],
[
"21",
"17"
],
[
"48",
"17"
],
[
"32",
"17"
],
[
"17",
"16"
],
[
"12",
"17"
],
[
"28",
"1"
],
[
"28",
"25"
],
[
"28",
"21"
],
[
"28",
"43"
],
[
"11",
"28"
],
[
"28",
"9"
],
[
"54",
"12"
],
[
"54",
"33"
],
[
"54",
"43"
],
[
"54",
"25"
],
[
"16",
"25"
],
[
"16",
"33"
],
[
"16",
"43"
],
[
"7",
"16"
],
[
"16",
"18"
],
[
"19",
"24"
],
[
"19",
"12"
],
[
"19",
"48"
],
[
"11",
"19"
],
[
"10",
"19"
],
[
"19",
"1"
],
[
"2",
"43"
],
[
"43",
"18"
],
[
"40",
"43"
],
[
"7",
"43"
],
[
"32",
"43"
],
[
"18",
"48"
],
[
"18",
"10"
],
[
"18",
"2"
],
[
"18",
"20"
],
[
"25",
"7"
],
[
"26",
"25"
],
[
"32",
"9"
],
[
"9",
"48"
],
[
"9",
"22"
],
[
"9",
"2"
],
[
"9",
"10"
],
[
"41",
"20"
],
[
"20",
"22"
],
[
"20",
"21"
],
[
"20",
"10"
],
[
"20",
"40"
],
[
"20",
"32"
],
[
"10",
"41"
],
[
"35",
"10"
],
[
"22",
"33"
],
[
"22",
"7"
],
[
"35",
"22"
],
[
"22",
"32"
],
[
"48",
"35"
],
[
"48",
"40"
],
[
"48",
"41"
],
[
"24",
"41"
],
[
"24",
"2"
],
[
"24",
"21"
],
[
"24",
"12"
],
[
"33",
"32"
],
[
"33",
"11"
],
[
"33",
"35"
],
[
"26",
"32"
],
[
"21",
"7"
],
[
"26",
"21"
],
[
"1",
"26"
],
[
"1",
"35"
],
[
"2",
"40"
],
[
"2",
"26"
],
[
"35",
"26"
],
[
"26",
"11"
],
[
"12",
"11"
]
]
const totalRounds = 8;
matchups.forEach((matchup) => {
matchup.sort((homeTeam, awayTeam) => {
const homeMatch = matchups.filter((m) => m[0] === homeTeam);
return homeMatch.length > (totalRounds / 2 ) ? 1 : -1;
});
});
const home = _.groupBy(matchups, m=> m[0])
const away = _.groupBy(matchups, m=> m[1])
console.log("home", home)
console.log("away", away)
console.log("combined",_.mergeWith(home,away, ((objValue,srcValue)=>{
if(Array.isArray(objValue)){
return objValue.concat(srcValue);
}
})))
以下是 5 队池的示例:
考虑从 A 到 E 的球队的主/客场比赛表:
回家的路 | A | B | C | D | E |
---|---|---|---|---|---|
A | X | O | O | X | X |
B | X | X | O | O | X |
C | X | X | X | O | O |
D | O | X | X | X | O |
E | O | O | X | X | X |
这意味着,例如,A 队主场对阵 B 队和 C 队,客场对阵 D 队和 E 队。
我任意填写了主/客场比赛矩阵,但它与您的规则一致:每支球队 2 场主场比赛和 2 场客场比赛(在这个 5 队池示例中)。
现在,如果您在
[Team 1, Team 2, ...]
数组和 [Team A, Team B, ...]
数组之间添加一些随机性,您最终将获得一个随机冠军,并具有适当数量的主场比赛和客场比赛。
如果这还不清楚,我可以添加更多细节。