这更像是一个逻辑问题,而不是一个编码问题,但对于每个人的信息,我正在使用Javascript。
我需要以编程方式创建一个14周安排12个团队之间,遵守以下规则:每个团队扮演对方团队至少一次。没有一支球队与另一支球队交手超过两次每个团队玩14游戏
我尝试遍历每个玩家,创建每个星期的比赛(游戏邦注:游戏1 -玩家1对阵玩家2,游戏2 -玩家1对阵玩家3等等),然后检查当前玩家是否已经在玩游戏(游戏1 -跳过(玩家2已经在玩),游戏2 -玩家2对阵玩家4(玩家3已经在玩),游戏3 -玩家2对阵玩家5)等等。因此,它为一个团队创建整个时间表,然后移动到下一个团队,等等。
工作正常,但当我添加逻辑来检查没有玩家与另一个玩家玩超过两次时,它会中断并进入一个无休止的循环。
我试着在每个星期都创建这样的对局(Game1 - Ply1 vs Ply2, Game2 - Ply3 vs Ply4, Game3等),检查玩家是否已经在玩游戏,但在添加资格赛时又失败了。
任何建议或指出正确的方向是非常感谢!我可以将userid存储在键值对或数组中,因此这些都不是任何解决方案中的限制因素。
期望的最终结果是这样的:
Schedule:{
Week1:{
Game1:{
Play1: somePlayer,
Play2: someOtherPlayer
},
Game2:{
Play1: somePlayer1,
Play2: someOtherPlayer1
},
Game3:{
Play1: somePlayer2,
Play2: someOtherPlayer2
}
//etc. and so on with 6 games per week for 14 weeks.
}
}
最接近的解决方案的基本框架(第一种方法):
let userArray = [1,2,3,4,5,6,7,8,9,10,11,12]
let schedule = {}
for(let x=0; x < userArray.length ; x++){
for(let y = 0; y < 14; y++){
//Check if schedule['WK'+y] exists and if not create it.
//Check if userArray[x] is playing in any existing games in schedule['WK'+y]
//Check if userArray[x+1] is playing in any existing games in schedule['WK'+y]
//IF YES - TRY userArray[x+2] etc (loop back to 0 if x+y is >12)
//IF NO - CREATE schedule['WK'+y]['Game'+x] = {Play1: userArray[x],Play2:userArray[x+whatever is accepted]
}
}
(Game1 - Ply1 vs Ply2, Game2 - Ply3 vs Ply4, Game3等)
也许你想创建这样的…
let userArray = [1,2,3,4,5,6,7,8,9,10,11,12]
let oneGame2Team = userArray.length/2
let schedule = {}
let i = 0
for(let k = 1; k <= 14; k++){
schedule[`Week${k}`] = {}
let newWeek = schedule[`Week${k}`]
for(let j = 0; j < oneGame2Team; j++) {
let firstPlayer = `Play${userArray[i]}`
let secondPlayer = `Play${userArray[i+=1]}`
newWeek[`Game${j+1}`] = {}
newWeek[`Game${j+1}`][firstPlayer] = `SomePlayer${j}`
newWeek[`Game${j+1}`][secondPlayer] = `SomePlayer${j}`
i++
}
i = 0
}
console.log(schedule)