use*_*888 3 ruby arrays sorting combinations
我正在尝试根据团队的ID来创建一个赛季的夹具列表.有20支球队,每周,任何一支球队只能打一次.因此,对于第一周,灯具将是(1,2),(3,4),(5,6),......,(19,20).然后是第二周,(1,3),(2,4),(5,7),......,(18,20).
是否有某种我可以做的公式可以很容易地使用灯具?也许组合不是在这里使用的最好的东西.什么是解决这个问题的最佳方法?
class FixtutreGenerator
a = Array(1..20)
i = 0
while i < a.combination(2).to_a.length
print a.combination(2).to_a[i]
i = i + 20
end
end
Run Code Online (Sandbox Code Playgroud)
听起来你正试图在循环赛中安排球队.维基百科描述了一种可以使用的算法 - 请参阅http://en.wikipedia.org/wiki/Round-robin_tournament#Scheduling_algorithm.
以下实现了打印每周配对的算法:
teams = Array(1..20)
fixed_team = teams.shift #The fixed competitor described in the algorithm
teams.length.times do |i|
#Create the two groups listed in the algorithm
teams = teams.rotate
week_teams = teams.dup.unshift(fixed_team)
first_group, second_group = week_teams.each_slice(week_teams.length/2).to_a
second_group.reverse!
weeks_pairings = first_group.zip(second_group)
#Output the week's pairings
puts "Week #{i + 1}: #{weeks_pairings}"
end
#Output:
#=> Week 1: [[1, 2], [3, 20], [4, 19], [5, 18], [6, 17], [7, 16], [8, 15], [9, 14], [10, 13], [11, 12]]
#=> Week 2: [[1, 3], [4, 2], [5, 20], [6, 19], [7, 18], [8, 17], [9, 16], [10, 15], [11, 14], [12, 13]]
#=> etc
Run Code Online (Sandbox Code Playgroud)