@@ -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 ' ]);
0 commit comments