javascript - 足球赛程javascript算法

标签 javascript algorithm

我有一个包含团队的数组:

var teams = [a, b, c, d]

我需要一个函数来生成所有可能的配对, 例如,如果 ab 一起玩,则 cd 一起玩,格式如下:

[{ team1: a, team2: b }, { team1: c, team2: d }]

然后 4 个团队的最终结果将如下所示:

var matches = {
    0: [{ team1: a, team2: b }, { team1: c, team2: d }]
    1: [{ team1: b, team2: c }, { team1: a, team2: d }]
    2: [{ team1: c, team2: a }, { team1: d, team2: b }]
}

团队人数始终为偶数且大于 3(4 , 6 ,8 , ...)

最佳答案

一种简单的迭代方法,直到每个团队都与他的所有敌人战斗:

 var teams = ["a", "b", "c", "d"];
teams = teams.map(id => ({id}));
teams.forEach(team => team.enemies = teams.filter(enemy => enemy !== team));

const matches = [];

while(teams.some(team => team.enemies.length)){
 const playing = [];
 for(const team of teams){
  if(playing.includes(team)) continue;
   const enemy = team.enemies.find(enemy => !playing.includes(enemy));
   if(!enemy) continue;
   team.enemies.splice(team.enemies.indexOf(enemy),1);
   enemy.enemies.splice(enemy.enemies.indexOf(team), 1);
   //console.log(team.id, enemy.id, playing.map(t => t.id));
   playing.push(team, enemy);
 }
 if(playing.length) matches.push(playing.map(t => t.id))
}

console.log(matches);

每场比赛可能分为 2 支球队进行比赛

关于javascript - 足球赛程javascript算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47961077/

相关文章:

javascript - 如何将 Typed.js 包含在 Aurelia 项目中

javascript - BackboneJS : router. 导航不是函数

javascript - 如何通过拖动另一张图像来更改图像?

php - 我如何有效地找到不与日期间隔重叠的所有记录?

algorithm - 多边形的重心

c++ - 如何通过键有效地合并 k 个排序的成对键/值 vector ?

javascript - 通过axios post调用传递参数

javascript - 如何撤消 $( "button").remove()?

javascript - 字符串搜索算法实现

mysql - SQL根据ID查找两行之间的时间差