Files
puzzle-scoreboard/app/controllers/concerns/contestants_concern.rb
sto 8a003a9731
Some checks failed
CI / scan_ruby (push) Has been cancelled
CI / scan_js (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / test (push) Has been cancelled
Implement shared scoreboard UI
2026-07-31 13:02:24 +02:00

17 lines
792 B
Ruby

module ContestantsConcern
extend ActiveSupport::Concern
def ranked_contestants(contest)
if contest.ranking_mode == "actual"
contest.contestants.includes([ :completions, :offline ]).sort_by { |contestant| [
-contestant.completions.where(remaining_pieces: nil).size,
(contestant.completions.where(remaining_pieces: nil).size == @contest.puzzles.length ? 1 : 0) * contestant.time_seconds,
contestant.completions.size > 0 && contestant.completions[-1].remaining_pieces ? contestant.completions[-1].remaining_pieces : 1000000,
contestant.time_seconds
] }
elsif contest.ranking_mode == "theorical"
contest.contestants.sort_by { |contestant| contestant.completions.map { |completion| completion.projected_time }.sum }
end
end
end