Skip to content

Commit 3e25ec9

Browse files
Use a table and show solve stats per team for team language stats
1 parent 3bfe011 commit 3e25ec9

File tree

2 files changed

+46
-13
lines changed

2 files changed

+46
-13
lines changed

webapp/src/Service/StatisticsService.php

+21-6
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,11 @@ public function getGroupedProblemsStats(
525525
* view: string,
526526
* languages: array<string, array{
527527
* name: string,
528-
* teams: array<int, Team>,
528+
* teams: array<array{
529+
* team: Team,
530+
* solved: int,
531+
* total: int,
532+
* }>,
529533
* team_count: int,
530534
* solved: int,
531535
* not_solved: int,
@@ -582,10 +586,18 @@ public function getLanguagesStats(Contest $contest, string $view): array
582586

583587
$language = $s->getLanguage();
584588

585-
$languageStats[$language->getLangid()]['teams'][$team->getTeamid()] = $team;
589+
if (!isset($languageStats[$language->getLangid()]['teams'][$team->getTeamid()])) {
590+
$languageStats[$language->getLangid()]['teams'][$team->getTeamid()] = [
591+
'team' => $team,
592+
'solved' => 0,
593+
'total' => 0,
594+
];
595+
}
596+
$languageStats[$language->getLangid()]['teams'][$team->getTeamid()]['total']++;
586597
$languageStats[$language->getLangid()]['total']++;
587598
if ($s->getResult() === 'correct') {
588599
$languageStats[$language->getLangid()]['solved']++;
600+
$languageStats[$language->getLangid()]['teams'][$team->getTeamid()]['solved']++;
589601
$languageStats[$language->getLangid()]['problems_solved'][$s->getProblem()->getProbId()] = $s->getContestProblem();
590602
} else {
591603
$languageStats[$language->getLangid()]['not_solved']++;
@@ -595,10 +607,13 @@ public function getLanguagesStats(Contest $contest, string $view): array
595607
}
596608

597609
foreach ($languageStats as &$languageStat) {
598-
usort($languageStat['teams'], static fn(
599-
Team $a,
600-
Team $b
601-
) => ($a->getLabel() ?: $a->getExternalid()) <=> ($b->getLabel() ?: $b->getExternalid()));
610+
usort($languageStat['teams'], static function (array $a, array $b): int {
611+
if ($a['solved'] === $b['solved']) {
612+
return $b['total'] <=> $a['total'];
613+
}
614+
615+
return $b['solved'] <=> $a['solved'];
616+
});
602617
$languageStat['team_count'] = count($languageStat['teams']);
603618
$languageStat['problems_solved_count'] = count($languageStat['problems_solved']);
604619
$languageStat['problems_attempted_count'] = count($languageStat['problems_attempted']);

webapp/templates/jury/analysis/languages.html.twig

+25-7
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,33 @@
2828
</div>
2929
<div class="card mt-2 mb-2 d-none" id="team-list-{{ langid }}">
3030
<div class="card-body">
31-
<ul class="mb-0">
31+
<table class="table table-striped table-hover">
32+
<thead>
33+
<tr>
34+
<td colspan="2">Team</td>
35+
<td>Number of solved problems in {{ language.name }}</td>
36+
<td>Total attempts in {{ language.name }}</td>
37+
</tr>
38+
</thead>
39+
<tbody>
3240
{% for team in language.teams %}
33-
<li>
34-
<a href="{{ path('jury_team', {'teamId': team.teamid}) }}">
35-
{{ team.effectiveName }} {{ team | entityIdBadge('t') }}
36-
</a>
37-
</li>
41+
<tr>
42+
<td>
43+
<a href="{{ path('jury_team', {'teamId': team.team.teamid}) }}">
44+
{{ team.team | entityIdBadge('t') }}
45+
</a>
46+
</td>
47+
<td>
48+
<a href="{{ path('jury_team', {'teamId': team.team.teamid}) }}">
49+
{{ team.team.effectiveName }}
50+
</a>
51+
</td>
52+
<td>{{ team.solved }}</td>
53+
<td>{{ team.total }}</td>
54+
</tr>
3855
{% endfor %}
39-
</ul>
56+
</tbody>
57+
</table>
4058
</div>
4159
</div>
4260
{% endif %}

0 commit comments

Comments
 (0)