- my @problems = problems;
- @problems = sort @problems;
- my %scores;
- for (1 .. jobcard) {
- if (job_result_text =~ m/^(\d+)/) {
- $scores{job_user()}{job_problem()} = $1;
+ my @problems = map { $_->problem } db($env)->contest_problems->search({contest => $ct->id}, {qw/join problem order_by problem.level/});
+ my (%scores, %tries);
+ for my $job (db($env)->jobs->search({contest => $ct->id})) {
+
+ if ($ct) {
+ my $time = $job->date - $ct->start;
+ next if $time < 0;
+ my $value = $job->problem->value // LEVEL_VALUES->{$job->problem->level};
+ $scores{$job->owner->id}{$job->problem->id} = $job->result ? 0 : calc_score ($value, $time, $tries{$job->owner}{$job->problem}, $ct->stop - $ct->start);
+ $tries{$job->owner->id}{$job->problem->id}++;