@@ -525,7 +525,11 @@ public function getGroupedProblemsStats(
525
525
* view: string,
526
526
* languages: array<string, array{
527
527
* name: string,
528
- * teams: array<int, Team>,
528
+ * teams: array<array{
529
+ * team: Team,
530
+ * solved: int,
531
+ * total: int,
532
+ * }>,
529
533
* team_count: int,
530
534
* solved: int,
531
535
* not_solved: int,
@@ -582,10 +586,18 @@ public function getLanguagesStats(Contest $contest, string $view): array
582
586
583
587
$ language = $ s ->getLanguage ();
584
588
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 ' ]++;
586
597
$ languageStats [$ language ->getLangid ()]['total ' ]++;
587
598
if ($ s ->getResult () === 'correct ' ) {
588
599
$ languageStats [$ language ->getLangid ()]['solved ' ]++;
600
+ $ languageStats [$ language ->getLangid ()]['teams ' ][$ team ->getTeamid ()]['solved ' ]++;
589
601
$ languageStats [$ language ->getLangid ()]['problems_solved ' ][$ s ->getProblem ()->getProbId ()] = $ s ->getContestProblem ();
590
602
} else {
591
603
$ languageStats [$ language ->getLangid ()]['not_solved ' ]++;
@@ -595,10 +607,13 @@ public function getLanguagesStats(Contest $contest, string $view): array
595
607
}
596
608
597
609
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
+ });
602
617
$ languageStat ['team_count ' ] = count ($ languageStat ['teams ' ]);
603
618
$ languageStat ['problems_solved_count ' ] = count ($ languageStat ['problems_solved ' ]);
604
619
$ languageStat ['problems_attempted_count ' ] = count ($ languageStat ['problems_attempted ' ]);
0 commit comments