The ACSC Finals are here – good luck & have fun! 🎉

Time remaining:

If you have a hard time reading this site, you can enable a simple accessibility mode by clicking on

Participating in the ACSC Finals means you follow the conditions and code of conduct!

Finals – Technical Information

The ACSC Finals take place on 25.06. from 09:00 to 17:00 CEST.

All challenges will be unlocked at 09:00 and can be solved until 17:00 sharp.

There will be challenge waves


You have been assigned to a fixed team within your bracket (junior, senior, or open).

Please verify your team assignment as soon as the scoreboard is available. If something is incorrect, open a ticket on Discord so we can fix it quickly.


Scoring remains dynamic – fewer points the more solves a challenge gets:

  • easy, medium, hard: 500 → 100 points (after 14 solves)

Everyone gets the same score for a challenge once solved – no rush, no race to first blood.

Tip: check the current point value to estimate a challenge’s difficulty.


Scoring formula:


import math
PTS_DELAY = 3


def calculate_ctf_points(solves, pts_max=500, pts_min=100, pts_decay_rate=100):
    """
    Calculate CTF points using sigmoid function decay.

    Parameters:
    solves (int): The score points (1, 2, 3, ...).
    max_points (int): The maximum points available
    min_points (int): The minimum points available
    steepness (float): Controls the steepness of the decay

    Returns:
    int: The CTF points awarded.
    """
    pts_diff = pts_max - pts_min
    pts_shift = pts_diff / 40
    pts_adj = pts_diff + pts_shift + (pts_diff + pts_shift) / math.exp(PTS_DELAY)

    decay = 10 / (15 + solves) * (pts_decay_rate / 65)
    decay_rate = math.exp(decay * (max(solves - 1, 0) - (PTS_DELAY / decay)))
    pts = pts_adj / (1 + decay_rate) + pts_min - pts_shift

    pts = math.ceil(pts)

    return max(pts, pts_min)
    

Got questions? Open a ticket on Discord and we’ll help you out!