]>
iEval git - plack-app-gruntmaster.git/blob - St.pm
562e4678cc2ab085ad24e247e8e635dd2cba06f0
1 package Gruntmaster
::Page
::St
;
6 use Gruntmaster
::Page
::Base st
=> 'Standings';
7 our @ISA = qw
/Gruntmaster::Page::Base/;
8 our $VERSION = '0.001';
10 use constant LEVEL_VALUES
=> {
18 my ($user, $problem, $date, $tries, $totaltime) = @_;
19 my $mxscore = LEVEL_VALUES
->{problem_level
($problem)};
21 my $timetaken = $date - get_open
($problem, $user);
22 $timetaken = 0 if $timetaken < 0;
23 $timetaken = 300 if $timetaken > $totaltime;
24 $score = ($totaltime - $timetaken) / $totaltime * $score;
25 $score -= $tries / 10 * $mxscore;
26 $score = $mxscore * 3 / 10 if $score < $mxscore * 3 / 10;
31 local $Gruntmaster::Data
::contest
;
33 my $name = user_name
$user;
39 my ($self, $htc, $lang, $env, $ct) = @_;
40 debug
$env => "language is '$lang' and contest is '$ct'";
41 my ($totaltime, $start);
43 local $Gruntmaster::Data
::contest
;
45 $start = contest_start
($ct);
46 $totaltime = contest_end
($ct) - $start;
47 $Gruntmaster::Data
::contest
= $ct;
50 my @problems = problems
;
51 @problems = sort @problems;
54 next unless defined job_user
&& defined job_problem
&& defined job_result
;
55 next if $Gruntmaster::Data
::contest
&& job_date
() < $start;
57 if ($Gruntmaster::Data
::contest
) {
58 $scores{job_user
()}{job_problem
()} = job_result
() ?
0 : calc_score
(job_user
(), job_problem
(), job_date
(), $tries{job_user
()}{job_problem
()}, $totaltime);
59 $tries{job_user
()}{job_problem
()}++;
61 no warnings
'numeric';
62 $scores{job_user
()}{job_problem
()} = 0 + job_result_text
() || (job_result
() ?
0 : 100)
66 my @st = sort { $b->{score
} <=> $a->{score
} or $a->{user
} cmp $b->{user
}} map {
70 score
=> sum
(values $scores{$user}),
71 scores
=> [map { $scores{$user}{$_} // '-'} @problems],
72 problems
=> $Gruntmaster::Data
::contest
,
77 $st[$_]->{rank
} = $st[$_ - 1]->{rank
} + ($st[$_]->{score
} < $st[$_ - 1]->{score
}) for 1 .. $#st;
78 $htc->param(problems
=> [map { problem_name
} @problems ]) if $Gruntmaster::Data
::contest
;
79 $htc->param(st
=> \
@st);
This page took 0.04893 seconds and 3 git commands to generate.