@@ -520,6 +520,7 @@ public function getGroupedProblemsStats(
520520 /**
521521 * @return array{
522522 * contest: Contest,
523+ * problems: ContestProblem[],
523524 * filters: array<string, string>,
524525 * view: string,
525526 * languages: array<string, array{
@@ -529,6 +530,10 @@ public function getGroupedProblemsStats(
529530 * solved: int,
530531 * not_solved: int,
531532 * total: int,
533+ * problems_solved: array<int, ContestProblem>,
534+ * problems_solved_count: int,
535+ * problems_attempted: array<int, ContestProblem>,
536+ * problems_attempted_count: int,
532537 * }>
533538 * }
534539 */
@@ -552,6 +557,10 @@ public function getLanguagesStats(Contest $contest, string $view): array
552557 'solved ' => 0 ,
553558 'not_solved ' => 0 ,
554559 'total ' => 0 ,
560+ 'problems_solved ' => [],
561+ 'problems_solved_count ' => 0 ,
562+ 'problems_attempted ' => [],
563+ 'problems_attempted_count ' => 0 ,
555564 ];
556565 }
557566
@@ -577,20 +586,28 @@ public function getLanguagesStats(Contest $contest, string $view): array
577586 $ languageStats [$ language ->getLangid ()]['total ' ]++;
578587 if ($ s ->getResult () === 'correct ' ) {
579588 $ languageStats [$ language ->getLangid ()]['solved ' ]++;
589+ $ languageStats [$ language ->getLangid ()]['problems_solved ' ][$ s ->getProblem ()->getProbId ()] = $ s ->getContestProblem ();
580590 } else {
581591 $ languageStats [$ language ->getLangid ()]['not_solved ' ]++;
582592 }
593+ $ languageStats [$ language ->getLangid ()]['problems_attempted ' ][$ s ->getProblem ()->getProbId ()] = $ s ->getContestProblem ();
583594 }
584595 }
585596
586597 foreach ($ languageStats as &$ languageStat ) {
587- usort ($ languageStat ['teams ' ], static fn (Team $ a , Team $ b ) => ($ a ->getLabel () ?: $ a ->getExternalid ()) <=> ($ b ->getLabel () ?: $ b ->getExternalid ()));
598+ usort ($ languageStat ['teams ' ], static fn (
599+ Team $ a ,
600+ Team $ b
601+ ) => ($ a ->getLabel () ?: $ a ->getExternalid ()) <=> ($ b ->getLabel () ?: $ b ->getExternalid ()));
588602 $ languageStat ['team_count ' ] = count ($ languageStat ['teams ' ]);
603+ $ languageStat ['problems_solved_count ' ] = count ($ languageStat ['problems_solved ' ]);
604+ $ languageStat ['problems_attempted_count ' ] = count ($ languageStat ['problems_attempted ' ]);
589605 }
590606 unset($ languageStat );
591607
592608 return [
593609 'contest ' => $ contest ,
610+ 'problems ' => $ this ->getContestProblems ($ contest ),
594611 'filters ' => StatisticsService::FILTERS ,
595612 'view ' => $ view ,
596613 'languages ' => $ languageStats ,
0 commit comments