The ACSC Finals are here – good luck & have fun! 🎉
Time remaining:
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!