diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/scheduling/elimination.rb | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/lib/scheduling/elimination.rb b/lib/scheduling/elimination.rb index 15c33ed..bf752b6 100644 --- a/lib/scheduling/elimination.rb +++ b/lib/scheduling/elimination.rb @@ -8,28 +8,28 @@ module Scheduling end def create_matches - num_teams = (self.tournament.players.count/self.tournament.min_players_per_team).floor + num_teams = (tournament.players.count/tournament.min_players_per_team).floor num_matches = (Float(num_teams - tournament.min_teams_per_match)/(tournament.min_teams_per_match - 1)).ceil + 1 for i in 1..num_matches - self.tournament_stage.matches.create(status: 0, submitted_peer_evaluations: 0) + tournament_stage.matches.create(status: 0, submitted_peer_evaluations: 0) end match_num = num_matches-1 team_num = 0 - self.tournament.players.shuffle + tournament.players.shuffle # for each grouping of min_players_per_team - self.tournament.players.each_slice(self.tournament.min_players_per_team) do |team_members| + tournament.players.each_slice(tournament.min_players_per_team) do |team_members| # if the match is full, move to the next match, otherwise move to the next team - if (team_num == self.tournament.min_teams_per_match) + if (team_num == tournament.min_teams_per_match) match_num -= 1 team_num = 1 else team_num += 1 end # create a new team in the current match - self.tournament_stage.matches[match_num].teams.push(Team.create(users: team_members)) + tournament_stage.matches[match_num].teams.push(Team.create(users: team_members)) end end @@ -59,18 +59,20 @@ module Scheduling xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="#{height}"> <defs> - <radialGradient id="gradMatch" cx="50%" cy="50%" r="80%" fx="80%" fy="80%"> - <stop offset="0%" style="stop-color:#ffd281; stop-opacity:0" /> - <stop offset="100%" style="stop-color:#ccc;stop-opacity:1" /> + <radialGradient id="gradMatch" cx="50%" cy="50%" r="80%" fx="50%" fy="50%"> + <stop offset="0%" style="stop-color:#fff; stop-opacity:1" /> + <stop offset="100%" style="stop-color:#ccc;stop-opacity:0" /> </radialGradient> </defs> STRING + base = 1 + pBase = 1 (1..matches.count).each do |i| matchDepth = Math.log(i*(logBase-1), logBase).floor+1 puts matchDepth - base = (logBase**(matchDepth-1)/(logBase-1)).ceil - if base == 0 - base = 1 + if matchDepth > Math.log(base*(logBase-1), logBase).floor+1 + pBase = base + base = i end puts base rh = 100 / (logBase**(depth-1)+1) - 100/height; @@ -107,7 +109,7 @@ STRING color = (matches[i].teams[t-1] and matches[i].teams[t-1].users.include?(current_user)) ? "#5BC0DE" : "white" str += "\t\t<rect width=\"#{rw-5}%\" height=\"#{rh*Float(30)/(matchHeight)}%\" x=\"#{rx + 2.5}%\" y=\"#{ry + (Float(t-1)/numTeams)*rh + 1 }%\" fill=\"#{color}\" />\n" if matches[i].teams[t-1] - str += "\t\t<text x=\"#{rx + rw/4}%\" y=\"#{ry + (Float(t-1)/numTeams + Float(30)/(matchHeight))*rh}%\" font-size=\"200%\">Team #{matches[i].teams[t-1].id}</text>\n" + str += "\t\t<text x=\"#{rx + rw/4}%\" y=\"#{ry + (Float(t-1)/numTeams + Float(33)/(matchHeight))*rh}%\" font-size=\"200%\">Team #{matches[i].teams[t-1].id}</text>\n" end if (t < numTeams) str += "\t\t<text x=\"#{rx + 1.3*rw/3}%\" y=\"#{ry + (Float(t)/numTeams)*rh + 1}%\" font-size=\"200%\"> VS </text>\n" @@ -118,7 +120,6 @@ STRING if i > 1 parent = (i+logBase-2)/logBase pDepth = Math.log(parent*(logBase-1), logBase).floor+1 - pBase = (logBase**(pDepth-1)/(logBase-1)).ceil lastrx = 50/(depth+1) + 100/(depth+1)*(depth-pDepth) lastry = 100/(logBase**(pDepth-1)+1) * (parent-pBase+1) - rh/2 str += "\t\t<line x1=\"#{rx+rw}%\" y1=\"#{ry+rh/2}%\" x2=\"#{lastrx}%\" y2=\"#{lastry+rh/2}%\" stroke=\"white\" stroke-width=\"2\" >\n" @@ -137,7 +138,7 @@ STRING end def tournament - self.tournament_stage.tournament + tournament_stage.tournament end end end |