作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我一直在到处搜索,包括 Stack Overflow 文件,寻找如何执行此操作的答案,我尝试自己动手,但没有找到答案,所以我决定在这里发布我的请求。
我需要在数组中获取任意(偶数)个项目,并返回与数组中另一个项目配对的项目。我需要代码的输出与我在下面包含的输出示例相同。
输入:
('A'..'H').to_a
输出:
[[['A','H'], ['B','G'], ['C','F'], ['D','E']], [['A','G'], ['B','F'], ['C','E'], ['D','H']], [['A','F'], ['B','E'], ['C','D'], ['G','H']], [['A','E'], ['B','D'], ['C','H'], ['F','G']], [['A','D'], ['B','C'], ['E','G'], ['F','H']], [['A','C'], ['B','H'], ['D','G'], ['E','F']], [['A','B'], ['C','G'], ['D','F'], ['E','H']]]
有什么想法吗?
这是我到目前为止所做的。它有点脏,而且没有按我需要的顺序返回。
items = ('A'..'H').to_acombinations = []1.upto(7) do |index| curitems = items.dup combination = [] 1.upto(items.size / 2) do |i| team1 = curitems.delete_at(0) team2 = curitems.delete_at(curitems.size - index) || curitems.delete_at(curitems.size - 1) combination << [team1, team2] end combinations << combinationendpp combinations
输出很接近,但顺序不正确:
[[["A", "H"], ["B", "G"], ["C", "F"], ["D", "E"]], [["A", "G"], ["B", "F"], ["C", "E"], ["D", "H"]], [["A", "F"], ["B", "E"], ["C", "D"], ["G", "H"]], [["A", "E"], ["B", "D"], ["C", "H"], ["F", "G"]], [["A", "D"], ["B", "C"], ["E", "G"], ["F", "H"]], [["A", "C"], ["B", "H"], ["D", "E"], ["F", "G"]], [["A", "B"], ["C", "G"], ["D", "H"], ["E", "F"]]]
您会注意到我的代码为我提供了两个 D<->H 组合(最后一行和第二行),但这是行不通的。
我对 OP 要求的理解 [FM]:
N
个团队(例如,8团队:A..H
).R
轮游戏组成(7在我们的示例中)和 G
游戏(28 in我们的例子)。A-H
是作为重复被拒绝,所以游戏 1 将是A-G
,H
会坐在后面燃烧器,与 D
配对作为本轮最后一场比赛)。E-H
;然而,这创造了一个场景第四场比赛将重演(F-G
)。所以算法需要回溯,拒绝 E-H
配对而不是在第 3 行选择 E-G
游戏。最佳答案
好吧,我可以正确理解您的 8 队示例,但我不知道如何概括调整。但也许这会让你思考......
games = (1...teams.size).map do |r|
t = teams.dup
(0...(teams.size/2)).map do |_|
[t.shift,t.delete_at(-(r % t.size + (r >= t.size * 2 ? 1 : 0)))]
end
end
关于ruby - 如何在 Ruby 中生成锦标赛时间表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1911170/
寻找算法或代码(如果有人愿意执行以下操作)。我需要为一些玩家提供意见。玩家的数量永远是 4 的因数。我想将单个玩家分成 4 人一组,重复次数最少。初始位置很简单: 1 2 3 4 T
Note: I do the javascript code according to the ajrwhite answer. Hope it helps someone. Link: http:/
我是一名优秀的程序员,十分优秀!