@@ -520,6 +520,7 @@ public function getGroupedProblemsStats(
520
520
/**
521
521
* @return array{
522
522
* contest: Contest,
523
+ * problems: ContestProblem[],
523
524
* filters: array<string, string>,
524
525
* view: string,
525
526
* languages: array<string, array{
@@ -529,6 +530,10 @@ public function getGroupedProblemsStats(
529
530
* solved: int,
530
531
* not_solved: int,
531
532
* total: int,
533
+ * problems_solved: array<int, ContestProblem>,
534
+ * problems_solved_count: int,
535
+ * problems_attempted: array<int, ContestProblem>,
536
+ * problems_attempted_count: int,
532
537
* }>
533
538
* }
534
539
*/
@@ -552,6 +557,10 @@ public function getLanguagesStats(Contest $contest, string $view): array
552
557
'solved ' => 0 ,
553
558
'not_solved ' => 0 ,
554
559
'total ' => 0 ,
560
+ 'problems_solved ' => [],
561
+ 'problems_solved_count ' => 0 ,
562
+ 'problems_attempted ' => [],
563
+ 'problems_attempted_count ' => 0 ,
555
564
];
556
565
}
557
566
@@ -577,20 +586,28 @@ public function getLanguagesStats(Contest $contest, string $view): array
577
586
$ languageStats [$ language ->getLangid ()]['total ' ]++;
578
587
if ($ s ->getResult () === 'correct ' ) {
579
588
$ languageStats [$ language ->getLangid ()]['solved ' ]++;
589
+ $ languageStats [$ language ->getLangid ()]['problems_solved ' ][$ s ->getProblem ()->getProbId ()] = $ s ->getContestProblem ();
580
590
} else {
581
591
$ languageStats [$ language ->getLangid ()]['not_solved ' ]++;
582
592
}
593
+ $ languageStats [$ language ->getLangid ()]['problems_attempted ' ][$ s ->getProblem ()->getProbId ()] = $ s ->getContestProblem ();
583
594
}
584
595
}
585
596
586
597
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 ()));
588
602
$ languageStat ['team_count ' ] = count ($ languageStat ['teams ' ]);
603
+ $ languageStat ['problems_solved_count ' ] = count ($ languageStat ['problems_solved ' ]);
604
+ $ languageStat ['problems_attempted_count ' ] = count ($ languageStat ['problems_attempted ' ]);
589
605
}
590
606
unset($ languageStat );
591
607
592
608
return [
593
609
'contest ' => $ contest ,
610
+ 'problems ' => $ this ->getContestProblems ($ contest ),
594
611
'filters ' => StatisticsService::FILTERS ,
595
612
'view ' => $ view ,
596
613
'languages ' => $ languageStats ,
0 commit comments