Skip to main content

Finale 2026 - Scoring

Back to overview

We will combine scoring based on the top score of the A/D.

Between the different sections (A/D, LiveCTF, Siemens) the distribution of points is:

  • 70% A/D
  • 15% Siemens
  • 15% LiveCTF

The following pseudo-code shows, how this will be handled:

teams = {
    "Team 1": {"ad_points": 123, "siemens_points":  50, "livectf_places": [1, 2, 3]},
    "Team 2": {"ad_points": 104, "siemens_points": 250, "livectf_places": [2, 1, 2]},
    "Team 3": {"ad_points":  93, "siemens_points": 100, "livectf_places": [3, 3, 1]},
    "Team 4": {"ad_points":  55, "siemens_points": 100, "livectf_places": [4, 4, 4]},
    # ...
}

live_ctf_score = {1: 10, 2: 9, 3: 8, 4: 7, 5: 6, 6: 5, 7: 4, 8: 3, 9: 2, 10: 1}
for team in teams.values():
    team["livectf_points"] = sum(live_ctf_score[place] for place in team["livectf_places"])    

max_ad = max(team["ad_points"] for team in teams.values())
max_siemens = 50 + 100 + 150
max_livectf = max(team["livectf_points"] for team in teams.values())

for team in teams.values():
    ad_points = team["ad_points"]
    siemens_points = team["siemens_points"]
    livectf_points = team["livectf_points"]

    team["total_score"] = 0.70 * ad_points \
                        + 0.15 * siemens_points/max_siemens * max_ad \
                        + 0.15 * livectf_points/max_livectf * max_ad

import json
print("max_ad", max_ad)
print("max_siemens", max_siemens)
print("max_livectf", max_livectf)
print()
print(json.dumps(teams, indent=4))

The full score will not be shown in the A/D scoreboard, and will be calculated by us once the competition has concluded.