作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经编写了一份联赛赛程表,以便 12 支球队总共进行 192 场比赛(与联盟对手各 4 次,与跨联盟对手各 2 次)。我也对这些游戏进行了洗牌。
我的最后一步是将这 192 场比赛分为 16 周,每场 6 场比赛。但是,重要的是每支球队在任何给定的一周内只出现一次(即每周只打一场比赛)。这是我坚持的部分。
我的日程安排数组看起来像这样:
let schedule = ["a : b", "c : d", "e : f", "g : h", "i : j", "k : l", "m : n", "o : p", "q : r", "s : t", "u : v", "x : y", "a : c", "d : f", "g : i", "l : o"]; // remember, this is actually 192 elements long
从这个数组(记住它有 192 个元素,所以它比上面的大,这是显示数据结构的示例)我想生成 week1
,这是一个包含 6 个元素的数组schedule
数组中的元素,如下所示:
let week1 = ["a : b", "c : d", "e : f", "g : h", "i : j", "k : l"];
以上就是我想要的结果。但是,我不能只使用 schedule.slice(0, 6)
来获取 6 个元素,因为我最终可能会让团队玩两次,如下所示:
let week1 = ["a : b", "c : d", "a : e", "f : g", "h : i", "j : k"]; // Notice "a" is playing twice here, which I do not want.
所以,问题是,如何从 192 场比赛的数组中取出 6 场比赛,但确保每支球队在这 6 场比赛的数组中只出现一次?
最佳答案
const games = ["a : b", "c : d", "e : f", "g : h", "i : j", "k : l", "m : n", "o : p", "q : r", "s : t", "u : v", "x : y", "a : c", "d : f", "g : i", "l : o"];
const teamsTaken = new Set();
const result = [];
for(const game of games) {
if(result.length >= 6) break;
const [teamA, teamB] = game.split(" : ");
if(teamsTaken.has(teamA) || teamsTaken.has(teamB)) continue;
teamsTaken.add(teamA);
teamsTaken.add(teamB);
result.push(game);
}
console.log(result);
使用哈希表排除重复项。
关于javascript - 将 192 场比赛的赛程分成 6 场比赛的周,不重复球队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57974024/
我是一名优秀的程序员,十分优秀!