gpt4 book ai didi

ruby - 如何在 Ruby 中生成锦标赛时间表?

转载 作者:数据小太阳 更新时间:2023-10-29 07:09:07 26 4
gpt4 key购买 nike

我一直在到处搜索,包括 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)优先。
  • 如果候选匹配被拒绝违反不重复规则,放排名靠后的队伍“后燃器”并形成另一个对决第一。然后匹配使用相同的后燃器团队规则。 (例如:在第 2 轮中,第一个候选对决 A-H 是作为重复被拒绝,所以游戏 1 将是A-GH会坐在后面燃烧器,与 D 配对作为本轮最后一场比赛)。
  • 在添加团队时,将它们添加到该列表的前面(即,保留也是次要的)。
  • 注意:第 5 轮是棘手的一轮。这前两场比赛很简单。第三场比赛将是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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com