Menci
8 years ago
14 changed files with 420 additions and 19 deletions
@ -0,0 +1,175 @@ |
|||||||
|
<% |
||||||
|
this.title = '统计'; |
||||||
|
let types = { |
||||||
|
fastest: '最快', |
||||||
|
slowest: '最慢', |
||||||
|
shortest: '最短', |
||||||
|
longest: '最长', |
||||||
|
earliest: '最早' |
||||||
|
}; |
||||||
|
%> |
||||||
|
<% include header %> |
||||||
|
<script src="//cdn.bootcss.com/raphael/2.2.7/raphael.min.js"></script> |
||||||
|
<script src="//cdn.bootcss.com/morris.js/0.5.1/morris.min.js"></script> |
||||||
|
<script> |
||||||
|
function getColorOfScore(score) { |
||||||
|
let color = []; |
||||||
|
color[0] = 'red'; |
||||||
|
color[1] = '#ff4b00'; |
||||||
|
color[2] = '#ff6200'; |
||||||
|
color[3] = '#ffa900'; |
||||||
|
color[4] = '#ffd800'; |
||||||
|
color[5] = '#c8ff00'; |
||||||
|
color[6] = '#a5ff00'; |
||||||
|
color[7] = '#52ff00'; |
||||||
|
color[8] = '#41f741'; |
||||||
|
color[9] = '#34d034'; |
||||||
|
color[10] = 'forestgreen'; |
||||||
|
return color[parseInt(score / 10)]; |
||||||
|
} |
||||||
|
</script> |
||||||
|
<div class="padding"> |
||||||
|
<h1 style="text-align: center; margin-bottom: 30px; "> |
||||||
|
满分提交 |
||||||
|
<span class="ui header" style="margin-left: 10px; "> |
||||||
|
<div class="ui compact menu"> |
||||||
|
<div class="ui simple dropdown item"> |
||||||
|
<%= types[statistics.type] %> |
||||||
|
<i class="dropdown icon"></i> |
||||||
|
<div class="menu"> |
||||||
|
<% for (let type in types) { %> |
||||||
|
<% if (type !== statistics.type) { %> |
||||||
|
<a class="item" href="<%= syzoj.utils.makeUrl(['problem', problem.id, 'statistics', type]) %>"><%= types[type] %></a> |
||||||
|
<% } %> |
||||||
|
<% } %> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</span> |
||||||
|
</h1> |
||||||
|
<table class="ui very basic center aligned table" style="white-space: nowrap; "> |
||||||
|
<thead> |
||||||
|
<tr> |
||||||
|
<th>编号</th> |
||||||
|
<th>题目</th> |
||||||
|
<th>状态</th> |
||||||
|
<th>分数</th> |
||||||
|
<th>总时间</th> |
||||||
|
<th>内存</th> |
||||||
|
<th>代码</th> |
||||||
|
<th>提交者</th> |
||||||
|
<th>提交时间</th> |
||||||
|
</tr> |
||||||
|
</thead> |
||||||
|
<tbody> |
||||||
|
<% for (let judge of statistics.judge_state) { %> |
||||||
|
<% include util %> |
||||||
|
<tr> |
||||||
|
<td><a href="<%= syzoj.utils.makeUrl(['judge_detail', judge.id]) %>">#<%= judge.id %></a></td> |
||||||
|
<td><a href="<%= syzoj.utils.makeUrl(['problem', judge.problem_id]) %>">#<%= judge.problem_id %>. <%= judge.problem.title %></a></td> |
||||||
|
<td><a href="<%= syzoj.utils.makeUrl(['judge_detail', judge.id]) %>"> |
||||||
|
<span class="status <%= getStatusMeta(judge.status).toLowerCase().split(' ').join('_') %>"> |
||||||
|
<i class="<%= icon[getStatusMeta(judge.status)] || 'remove' %> icon"></i> |
||||||
|
<%= judge.status %> |
||||||
|
</span> |
||||||
|
</a></td> |
||||||
|
<td><a href="<%= syzoj.utils.makeUrl(['judge_detail', judge.id]) %>"><span class="score score_<%= parseInt(judge.result.score / 10) || 0 %>"><%= judge.result.score %></span></a></td> |
||||||
|
<td><%= judge.result.total_time %> ms</td> |
||||||
|
<td><%= parseInt(judge.result.max_memory) || 0 %> K</td> |
||||||
|
<td><a href="<%= syzoj.utils.makeUrl(['judge_detail', judge.id]) %>"><%= syzoj.config.languages[judge.language].show %></a> / <%= syzoj.utils.formatSize(judge.code.length) %></td> |
||||||
|
<td><a href="<%= syzoj.utils.makeUrl(['user', judge.user_id]) %>"><%= judge.user.username %></a><% if (judge.user.nameplate) { %><%- judge.user.nameplate %><% } %></td> |
||||||
|
<td><%= syzoj.utils.formatDate(judge.submit_time) %></td> |
||||||
|
</tr> |
||||||
|
<% } %> |
||||||
|
</tbody> |
||||||
|
</table> |
||||||
|
<br> |
||||||
|
<% include page %> |
||||||
|
<br> |
||||||
|
<h1 style="text-align: center; "> |
||||||
|
得分分布 |
||||||
|
</h1> |
||||||
|
<div id="score-distribution-chart" style="height: 250px;"></div> |
||||||
|
<script type="text/javascript"> |
||||||
|
new Morris.Bar({ |
||||||
|
element: 'score-distribution-chart', |
||||||
|
data: <%- JSON.stringify(statistics.scoreDistribution) %>, |
||||||
|
barColors: function(r, s, type) { |
||||||
|
return getColorOfScore(r.label); |
||||||
|
}, |
||||||
|
xkey: 'score', |
||||||
|
ykeys: ['count'], |
||||||
|
labels: ['number'], |
||||||
|
hoverCallback: function(index, options, content, row) { |
||||||
|
var scr = row.score; |
||||||
|
return '<div class="morris-hover-row-label">分数:' + scr + '</div><div class="morris-hover-point">数量:' + row.count + '</div>'; |
||||||
|
}, |
||||||
|
resize: true |
||||||
|
}); |
||||||
|
</script> |
||||||
|
<h1 style="text-align: center; "> |
||||||
|
前缀和 |
||||||
|
</h1> |
||||||
|
<div id="score-distribution-chart-pre" style="height: 250px;"></div> |
||||||
|
<script type="text/javascript"> |
||||||
|
<% |
||||||
|
for (let i in statistics.prefixSum) { |
||||||
|
statistics.prefixSum[i].score *= 100; |
||||||
|
} |
||||||
|
%> |
||||||
|
new Morris.Line({ |
||||||
|
element: 'score-distribution-chart-pre', |
||||||
|
data: <%- JSON.stringify(statistics.prefixSum) %>, |
||||||
|
xkey: 'score', |
||||||
|
ykeys: ['count'], |
||||||
|
labels: ['number'], |
||||||
|
lineColors: function(row, sidx, type) { |
||||||
|
if (type == 'line') { |
||||||
|
return '#0b62a4'; |
||||||
|
} |
||||||
|
return getColorOfScore(row.src.score / 100); |
||||||
|
}, |
||||||
|
xLabelFormat: function(x) { |
||||||
|
return (x.getTime() / 100).toString(); |
||||||
|
}, |
||||||
|
hoverCallback: function(index, options, content, row) { |
||||||
|
var scr = row.score / 100; |
||||||
|
return '<div class="morris-hover-row-label">分数:≤ ' + scr + '</div><div class="morris-hover-point">数量:' + row.count + '</div>'; |
||||||
|
}, |
||||||
|
resize: true |
||||||
|
}); |
||||||
|
</script> |
||||||
|
<h1 style="text-align: center; "> |
||||||
|
后缀和 |
||||||
|
</h1> |
||||||
|
<div id="score-distribution-chart-suf" style="height: 250px;"></div> |
||||||
|
<script type="text/javascript"> |
||||||
|
<% |
||||||
|
for (let i in statistics.suffixSum) { |
||||||
|
statistics.suffixSum[i].score *= 100; |
||||||
|
} |
||||||
|
%> |
||||||
|
new Morris.Line({ |
||||||
|
element: 'score-distribution-chart-suf', |
||||||
|
data: <%- JSON.stringify(statistics.suffixSum) %>, |
||||||
|
xkey: 'score', |
||||||
|
ykeys: ['count'], |
||||||
|
labels: ['number'], |
||||||
|
lineColors: function(row, sidx, type) { |
||||||
|
if (type == 'line') { |
||||||
|
return '#0b62a4'; |
||||||
|
} |
||||||
|
return getColorOfScore(row.src.score / 100); |
||||||
|
}, |
||||||
|
xLabelFormat: function(x) { |
||||||
|
return (x.getTime() / 100).toString(); |
||||||
|
}, |
||||||
|
hoverCallback: function(index, options, content, row) { |
||||||
|
var scr = row.score / 100; |
||||||
|
return '<div class="morris-hover-row-label">分数:≥ ' + scr + '</div><div class="morris-hover-point">数量:' + row.count + '</div>'; |
||||||
|
}, |
||||||
|
resize: true |
||||||
|
}); |
||||||
|
</script> |
||||||
|
</div> |
||||||
|
<% include footer %> |
Loading…
Reference in new issue