Я делаю футбольного турнирного менеджера для детских игр. Раундов может быть много, и каждая команда в каждом раунде играет друг против друга. Учитывая комбинации каждого тура, мне нужен календарь матчей с наибольшим количеством команд, играющих одновременно. Есть ли способ упорядочить массив комбинаций для достижения результата?
Я пытался "сделать" какой-то алгоритм, но не смог найти лучшего. В предоставленном коде гарантируется, что две команды могут играть одновременно, но не более...
teams = [1,2,3,4,5,6,7,8] # number of teams is variable
pairings = teams.combination(2).to_a
pairings.shuffle!
calendar = []
calendar << pairings.slice!(0)
while pairings.any?
p = calendar.slice(-1)
a = p[0]
b = p[1]
matched = false
pairings.each do |pairing|
next if pairing.include? a
next if pairing.include? b
matched = true
calendar << pairings.delete(pairing)
break
end
unless matched
p1 = pairings.slice!(0)
prev = false
calendar.each do |pairing|
if pairing.include?(a) || pairing.include?(b)
prev = true
next
end
unless prev
i = calendar.index(pairing)
calendar.insert(i, p1)
break
end
prev = false
end
end
end