diff --git a/mo/score.py b/mo/score.py index 510095a89617ea93f62cca6772fe921345830bee..513e80370fb8a8802a4f0d9010c2ac7ca6533ed4 100644 --- a/mo/score.py +++ b/mo/score.py @@ -486,12 +486,8 @@ class Score: # 1. Podle úspěšných řešitelů, 2. Podle bodů result._order_key.extend((not result.successful, -total_points)) - if result.successful or not self.want_successful: - # 3. Podle modifikovaných bodů - result._order_key.append(-modif_points) - else: - # Neúspěšné řešitele třídíme sekundárně podle jména a user_id - result._order_key.extend((result.user.name_sort_key(), result.user.user_id)) + # 3. Podle modifikovaných bodů + result._order_key.append(-modif_points) # Na konec třídícího klíče přidáme ročník (menší ročník první) for result in self._results.values(): diff --git a/mo/web/org_score.py b/mo/web/org_score.py index be705c733e2683345aaf9fee7fa1ebfc2f4378cd..cd07526d3b25c9bf08668d0bae7bc4840eaa3339 100644 --- a/mo/web/org_score.py +++ b/mo/web/org_score.py @@ -281,6 +281,7 @@ def org_score(round_id: Optional[int] = None, hier_id: Optional[int] = None, ct_ can_view_submits=ctx.rights.can_view_submits(), public=public, edit_form=edit_form, + RoundScoreMode=db.RoundScoreMode, ) else: return table.send_as(format) diff --git a/mo/web/templates/org_score.html b/mo/web/templates/org_score.html index 5b17c68d8cc05ed2b90bc06b21441ca06ec87527..b2dbb8851503873e46d7d9c625f5e30f601166c2 100644 --- a/mo/web/templates/org_score.html +++ b/mo/web/templates/org_score.html @@ -64,9 +64,22 @@ Výsledky {{ round.name|round_genitive|lower }}{% if public %} {{ round.year }}. {% elif type == "warning" %}<p class="text-warning">{{ msg }}</p> {% else %}<p>{{ msg | safe }}{% endif %}</p> {% endfor %} +{% endif %} -<p class="text-muted">Mód této výsledkové listiny je <i>{{ master.score_mode.friendly_name() }}</i>. -Diskvalifikovaní, odmítnuvší a nepřítomní účastníci jsou skryti, stejně tak testovací uživatelé. +<p class="text-muted"> +{% if master.score_mode == RoundScoreMode.fo %} +Ve výsledném pořadí jsou nejprve uvedeni úspěšní řešitelé seřazeni podle počtu bodů a teprve za nimi jsou další účastníci. Při shodném počtu bodů o pořadí rozhoduje: +<ol class="text-muted"> + <li>Vyšší počet „modifikovaných bodů“, které se vypočítají dle vzorce ∑ <i>b</i>·(<i>max</i>−<i>prum</i>), + kde <i>b</i> je bodový zisk z dané úlohy, <i>max</i> je maximum bodů dané úlohy a <i>prum</i> je průměrný bodový zisk z dané úlohy v daném kraji. +Znamená to, že v modifikovaných bodech má větší váhu zisk bodů z obtížnějších úloh.</li> + <li>Ročník studia soutěžícího, příp. datum narození. Mladší mají přednost.</li> + <li>Pokud nerozhodne ani jedno z předchozích kritérií, rozhoduje los.</li> +</ol> +{% else %} +Mód této výsledkové listiny je <i>{{ master.score_mode.friendly_name() }}</i>. +{% endif %} +<p class="text-muted">Diskvalifikovaní, odmítnuvší a nepřítomní účastníci jsou skryti, stejně tak testovací uživatelé. </p> {% if group_rounds|length > 1 %} @@ -75,6 +88,7 @@ Diskvalifikovaní, odmítnuvší a nepřítomní účastníci jsou skryti, stejn Jsou v ní započítány body ze všech úloh těchto kol.</p> {% endif %} +{% if not public %} <p> {% if contest and contest.state == RoundState.closed or round.state == RoundState.closed %} <a class="btn btn-default" target="_blank" href="{{ ctx.url_for('public_score') }}">Veřejná výsledková listina</a>