Description:
exclude admin from first solver
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r427:033146f49894 - - 1 file changed: 2 inserted, 1 deleted

@@ -41,147 +41,148
41 }
41 }
42 end
42 end
43 end
43 end
44
44
45 def submission_stat
45 def submission_stat
46
46
47 date_and_time = '%Y-%m-%d %H:%M'
47 date_and_time = '%Y-%m-%d %H:%M'
48 begin
48 begin
49 @since_time = DateTime.strptime(params[:since_datetime],date_and_time)
49 @since_time = DateTime.strptime(params[:since_datetime],date_and_time)
50 rescue
50 rescue
51 @since_time = DateTime.new(1000,1,1)
51 @since_time = DateTime.new(1000,1,1)
52 end
52 end
53 begin
53 begin
54 @until_time = DateTime.strptime(params[:until_datetime],date_and_time)
54 @until_time = DateTime.strptime(params[:until_datetime],date_and_time)
55 rescue
55 rescue
56 @until_time = DateTime.new(3000,1,1)
56 @until_time = DateTime.new(3000,1,1)
57 end
57 end
58
58
59 @submissions = {}
59 @submissions = {}
60
60
61 User.find_each do |user|
61 User.find_each do |user|
62 @submissions[user.id] = { login: user.login, full_name: user.full_name, count: 0, sub: { } }
62 @submissions[user.id] = { login: user.login, full_name: user.full_name, count: 0, sub: { } }
63 end
63 end
64
64
65 Submission.where("submitted_at >= ? AND submitted_at <= ?",@since_time,@until_time).find_each do |s|
65 Submission.where("submitted_at >= ? AND submitted_at <= ?",@since_time,@until_time).find_each do |s|
66 if @submissions[s.user_id]
66 if @submissions[s.user_id]
67 if not @submissions[s.user_id][:sub].has_key?(s.problem_id)
67 if not @submissions[s.user_id][:sub].has_key?(s.problem_id)
68 a = nil
68 a = nil
69 begin
69 begin
70 a = Problem.find(s.problem_id)
70 a = Problem.find(s.problem_id)
71 rescue
71 rescue
72 a = nil
72 a = nil
73 end
73 end
74 @submissions[s.user_id][:sub][s.problem_id] =
74 @submissions[s.user_id][:sub][s.problem_id] =
75 { prob_name: (a ? a.full_name : '(NULL)'),
75 { prob_name: (a ? a.full_name : '(NULL)'),
76 sub_ids: [s.id] }
76 sub_ids: [s.id] }
77 else
77 else
78 @submissions[s.user_id][:sub][s.problem_id][:sub_ids] << s.id
78 @submissions[s.user_id][:sub][s.problem_id][:sub_ids] << s.id
79 end
79 end
80 @submissions[s.user_id][:count] += 1
80 @submissions[s.user_id][:count] += 1
81 end
81 end
82 end
82 end
83 end
83 end
84
84
85 def problem_hof
85 def problem_hof
86 # gen problem list
86 # gen problem list
87 @user = User.find(session[:user_id])
87 @user = User.find(session[:user_id])
88 @problems = @user.available_problems
88 @problems = @user.available_problems
89
89
90 # get selected problems or the default
90 # get selected problems or the default
91 if params[:id]
91 if params[:id]
92 begin
92 begin
93 @problem = Problem.available.find(params[:id])
93 @problem = Problem.available.find(params[:id])
94 rescue
94 rescue
95 redirect_to action: :problem_hof
95 redirect_to action: :problem_hof
96 flash[:notice] = 'Error: submissions for that problem are not viewable.'
96 flash[:notice] = 'Error: submissions for that problem are not viewable.'
97 return
97 return
98 end
98 end
99 end
99 end
100
100
101 if @problem
101 if @problem
102 #aggregrate by language
102 #aggregrate by language
103 @by_lang = {}
103 @by_lang = {}
104 Submission.where(problem_id: @problem.id).find_each do |sub|
104 Submission.where(problem_id: @problem.id).find_each do |sub|
105 lang = Language.find_by_id(sub.language_id)
105 lang = Language.find_by_id(sub.language_id)
106 next unless lang
106 next unless lang
107 next unless sub.points >= @problem.full_score
107 next unless sub.points >= @problem.full_score
108
108
109 #initialize
109 #initialize
110 unless @by_lang.has_key?(lang.pretty_name)
110 unless @by_lang.has_key?(lang.pretty_name)
111 @by_lang[lang.pretty_name] = {
111 @by_lang[lang.pretty_name] = {
112 runtime: { avail: false, value: 2**30-1 },
112 runtime: { avail: false, value: 2**30-1 },
113 memory: { avail: false, value: 2**30-1 },
113 memory: { avail: false, value: 2**30-1 },
114 length: { avail: false, value: 2**30-1 },
114 length: { avail: false, value: 2**30-1 },
115 first: { avail: false, value: DateTime.new(3000,1,1) }
115 first: { avail: false, value: DateTime.new(3000,1,1) }
116 }
116 }
117 end
117 end
118
118
119 if sub.max_runtime and sub.max_runtime < @by_lang[lang.pretty_name][:runtime][:value]
119 if sub.max_runtime and sub.max_runtime < @by_lang[lang.pretty_name][:runtime][:value]
120 @by_lang[lang.pretty_name][:runtime] = {
120 @by_lang[lang.pretty_name][:runtime] = {
121 avail: true,
121 avail: true,
122 user_id: sub.user_id,
122 user_id: sub.user_id,
123 value: sub.max_runtime,
123 value: sub.max_runtime,
124 sub_id: sub.id
124 sub_id: sub.id
125 }
125 }
126 end
126 end
127
127
128 if sub.peak_memory and sub.peak_memory < @by_lang[lang.pretty_name][:memory][:value]
128 if sub.peak_memory and sub.peak_memory < @by_lang[lang.pretty_name][:memory][:value]
129 @by_lang[lang.pretty_name][:memory] = {
129 @by_lang[lang.pretty_name][:memory] = {
130 avail: true,
130 avail: true,
131 user_id: sub.user_id,
131 user_id: sub.user_id,
132 value: sub.peak_memory,
132 value: sub.peak_memory,
133 sub_id: sub.id
133 sub_id: sub.id
134 }
134 }
135 end
135 end
136
136
137 - if sub.submitted_at and sub.submitted_at < @by_lang[lang.pretty_name][:first][:value]
137 + if sub.user.admin? == false and
138 + sub.submitted_at and sub.submitted_at < @by_lang[lang.pretty_name][:first][:value]
138 @by_lang[lang.pretty_name][:first] = {
139 @by_lang[lang.pretty_name][:first] = {
139 avail: true,
140 avail: true,
140 user_id: sub.user_id,
141 user_id: sub.user_id,
141 value: sub.submitted_at,
142 value: sub.submitted_at,
142 sub_id: sub.id
143 sub_id: sub.id
143 }
144 }
144 end
145 end
145
146
146 if @by_lang[lang.pretty_name][:length][:value] > sub.effective_code_length
147 if @by_lang[lang.pretty_name][:length][:value] > sub.effective_code_length
147 @by_lang[lang.pretty_name][:length] = {
148 @by_lang[lang.pretty_name][:length] = {
148 avail: true,
149 avail: true,
149 user_id: sub.user_id,
150 user_id: sub.user_id,
150 value: sub.effective_code_length,
151 value: sub.effective_code_length,
151 sub_id: sub.id
152 sub_id: sub.id
152 }
153 }
153 end
154 end
154 end
155 end
155
156
156 #process user_id
157 #process user_id
157 @by_lang.each do |lang,prop|
158 @by_lang.each do |lang,prop|
158 prop.each do |k,v|
159 prop.each do |k,v|
159 v[:user] = User.exists?(v[:user_id]) ? User.find(v[:user_id]).full_name : "(NULL)"
160 v[:user] = User.exists?(v[:user_id]) ? User.find(v[:user_id]).full_name : "(NULL)"
160 end
161 end
161 end
162 end
162
163
163 #sum into best
164 #sum into best
164 if @by_lang and @by_lang.first
165 if @by_lang and @by_lang.first
165 @best = @by_lang.first[1]
166 @best = @by_lang.first[1]
166 @by_lang.each do |lang,prop|
167 @by_lang.each do |lang,prop|
167 if @best[:runtime][:value] >= prop[:runtime][:value]
168 if @best[:runtime][:value] >= prop[:runtime][:value]
168 @best[:runtime] = prop[:runtime]
169 @best[:runtime] = prop[:runtime]
169 @best[:runtime][:lang] = lang
170 @best[:runtime][:lang] = lang
170 end
171 end
171 if @best[:memory][:value] >= prop[:memory][:value]
172 if @best[:memory][:value] >= prop[:memory][:value]
172 @best[:memory] = prop[:memory]
173 @best[:memory] = prop[:memory]
173 @best[:memory][:lang] = lang
174 @best[:memory][:lang] = lang
174 end
175 end
175 if @best[:length][:value] >= prop[:length][:value]
176 if @best[:length][:value] >= prop[:length][:value]
176 @best[:length] = prop[:length]
177 @best[:length] = prop[:length]
177 @best[:length][:lang] = lang
178 @best[:length][:lang] = lang
178 end
179 end
179 if @best[:first][:value] >= prop[:first][:value]
180 if @best[:first][:value] >= prop[:first][:value]
180 @best[:first] = prop[:first]
181 @best[:first] = prop[:first]
181 @best[:first][:lang] = lang
182 @best[:first][:lang] = lang
182 end
183 end
183 end
184 end
184 end
185 end
185 end
186 end
186 end
187 end
187 end
188 end
You need to be logged in to leave comments. Login now