Skip to content

Commit

Permalink
Optimize time complexity.
Browse files Browse the repository at this point in the history
  • Loading branch information
as6325400 committed Sep 26, 2024
1 parent 5220e50 commit c55dc14
Showing 1 changed file with 31 additions and 21 deletions.
52 changes: 31 additions & 21 deletions webapp/templates/jury/analysis/contest_overview.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -363,30 +363,40 @@ var submission_stats = [
{
key: "{{result}}",
color: "{{colors[result]}}",
values: [
{% set current_minute = 0 %}
{% set minute_count = 0 %}
{% for minute in range(0, ((current_contest.endtime - current_contest.starttime) / 60)|round ) %}
{% set minute_count = 0 %}
{% for submission in submissions | filter(submission => submission.result) %}
{# Calculate which minute the submission belongs to #}
{% if submission.result == result %}
{% set submission_minute = ((submission.submittime - current_contest.starttime) / 60)|round %}
{% if submission_minute == minute %}
{% set minute_count = minute_count + 1 %}
{% endif %}
{% endif %}
{% endfor %}
{# The number of submissions in this minute #}
[{{ minute }}, {{ minute_count }}],
{% if minute_count > max_submissions_per_minute %}
{% set max_submissions_per_minute = minute_count %}
{% endif %}
{% endfor %}
]
values: []
},
{% endfor %}
];
var submissions = [
{% for submission in submissions %}
{
result: "{{ submission.result }}",
submittime: {{ submission.submittime }},
starttime: {{ current_contest.starttime }}
}{{ loop.last ? '' : ',' }}
{% endfor %}
];
var contest_duration_minutes = {{ ((current_contest.endtime - current_contest.starttime) / 60)|round }};
submission_stats.forEach(stat => {
stat.values = Array.from({ length: contest_duration_minutes }, (_, i) => [i, 0]);
});
const statMap = submission_stats.reduce((map, stat) => {
map[stat.key] = stat;
return map;
}, {});
submissions.forEach(submission => {
let submission_minute = Math.round((submission.submittime - submission.starttime) / 60);
let stat = statMap[submission.result];
if (stat && submission_minute >= 0 && submission_minute < contest_duration_minutes) {
stat.values[submission_minute][1]++;
}
});
nv.addGraph(function() {
var chart = nv.models.stackedAreaChart()
// .margin({left: 100}) //Adjust chart margins to give the x-axis some breathing room.
Expand Down

0 comments on commit c55dc14

Please sign in to comment.