This commit is contained in:
2026-10-03 13:22:11 +07:00
parent 05090722a0
commit 2caa2c1a88
74 changed files with 44 additions and 676 deletions
+3 -22
View File
@@ -7,31 +7,18 @@ import (
"evening_detective_server/internal/modules/storytelling"
)
// TeamResult — строка итоговой таблицы: команда, баллы по вопросам (в порядке
// сценария), сумма баллов и место.
type TeamResult struct {
Team *game_model.Team
Answers []AnswerScore
// TotalScore — сумма баллов по всем вопросам сценария; неоценённые
// вопросы считаются как 0.
Team *game_model.Team
Answers []AnswerScore
TotalScore int
// Place — место в итоговой таблице. Команды с одинаковой суммой баллов
// и одинаковым числом ходов занимают одно место (следующее место
// пропускается); проставляется функцией rankTeams.
Place int
Place int
}
// GameResults — итоговая таблица игры: вопросы сценария (шапка таблицы) и
// результаты команд, отсортированные по сумме баллов.
type GameResults struct {
Questions []*storytelling.Question
Teams []TeamResult
}
// buildTeamResults собирает строки итоговой таблицы по командам: баллы в
// порядке вопросов сценария (неотвеченный/неоценённый вопрос — с пустым
// текстом и Score=nil), сумма баллов (nil считается как 0). Команды в
// результате — в порядке переданного списка; сортировку и места делает
// rankTeams.
func buildTeamResults(
questions []*storytelling.Question,
@@ -63,12 +50,6 @@ func buildTeamResults(
return res
}
// rankTeams сортирует строки итоговой таблицы по сумме баллов (убывание);
// при равенстве суммы выше команда с меньшим числом ходов. Команды с
// одинаковой суммой баллов И одинаковым числом ходов занимают одно место
// (следующее место пропускается — схема 1,2,2,4 по ключу (сумма, ходы)).
// id команды влияет только на порядок показа внутри группы (меньший id
// первым), не на место. Входной срез не изменяется.
func rankTeams(rows []TeamResult) []TeamResult {
sorted := make([]TeamResult, len(rows))
copy(sorted, rows)