summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/scheduling/elimination.rb31
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