Files
puzzle-scoreboard/app/controllers/concerns/contestants_concern.rb

17 lines
755 B
Ruby

module ContestantsConcern
extend ActiveSupport::Concern
def ranked_contestants(contest)
if contest.ranking_mode == "actual"
contest.contestants.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