1
0
mirror of https://github.com/jcwimer/wrestlingApp synced 2026-04-16 13:03:37 +00:00

Updated seeding logic for double elim to make byes truly random and to keep bracket lines consistent through match generations

This commit is contained in:
2024-12-23 16:17:43 -05:00
parent 6242100e01
commit 7e6d7ddfbb
8 changed files with 213 additions and 55 deletions

View File

@@ -3,42 +3,63 @@ class TournamentSeeding
@tournament = tournament
end
def setSeeds
@tournament.weights.each do |w|
resetAllSeeds(w)
setOriginalSeeds(w)
randomSeeding(w)
def set_seeds
@tournament.weights.each do |weight|
wrestlers = weight.wrestlers
bracket_size = weight.calculate_bracket_size
wrestlers = reset_bracket_line_for_lines_higher_than_bracket_size(wrestlers, bracket_size)
wrestlers = set_original_seed_to_bracket_line(wrestlers)
wrestlers = random_seeding(wrestlers, bracket_size)
wrestlers.each(&:save)
end
end
def randomSeeding(weight)
wrestlerWithSeeds = weight.wrestlers.select{|w| w.original_seed != nil }.sort_by{|w| w.original_seed}
if wrestlerWithSeeds.size > 0
highestSeed = wrestlerWithSeeds.last.bracket_line
seed = highestSeed + 1
else
seed = 1
def random_seeding(wrestlers, bracket_size)
available_bracket_lines = (1..bracket_size).to_a
# remove bracket lines that are taken from available_bracket_lines
wrestlers_with_bracket_lines = wrestlers.select{|w| w.bracket_line != nil }
wrestlers_with_bracket_lines.each do |wrestler|
available_bracket_lines.delete(wrestler.bracket_line)
end
wrestlersWithoutSeed = weight.wrestlers.select{|w| w.original_seed == nil }
wrestlersWithoutSeed.shuffle.each do |w|
w.bracket_line = seed
w.save
seed += 1
wrestlers_without_bracket_lines = wrestlers.select{|w| w.bracket_line == nil }
# Iterrate over the list randomly
wrestlers_without_bracket_lines.shuffle.each do |wrestler|
random_available_bracket_line = available_bracket_lines.sample
wrestler.bracket_line = random_available_bracket_line
available_bracket_lines.delete(random_available_bracket_line)
end
return wrestlers
end
def setOriginalSeeds(weight)
wrestlerWithSeeds = weight.wrestlers.select{|w| w.original_seed != nil }
wrestlerWithSeeds.each do |w|
w.bracket_line = w.original_seed
w.save
def set_original_seed_to_bracket_line(wrestlers)
wrestlers_with_seeds = wrestlers.select{|w| w.original_seed != nil }
wrestlers_with_seeds.each do |wrestler|
wrestlers_with_seeded_wrestlers_bracket_line = wrestlers.select{|w| w.bracket_line == wrestler.original_seed && w.id != wrestler.id}
wrestlers_with_seeded_wrestlers_bracket_line.each do |wrestler_with_wrong_bracket_line|
wrestler_with_wrong_bracket_line.bracket_line = nil
end
wrestler.bracket_line = wrestler.original_seed
end
return wrestlers
end
def resetAllSeeds(weight)
weight.wrestlers.each do |w|
def reset_bracket_line_for_lines_higher_than_bracket_size(wrestlers, bracket_size)
wrestlers.each do |w|
if w.bracket_line && w.bracket_line > bracket_size
w.bracket_line = nil
end
end
return wrestlers
end
def reset_all_seeds(wrestlers)
wrestlers.each do |w|
w.bracket_line = nil
w.save
end
return wrestlers
end
end