Countdown to CTF Start
Participating in this CTF means that you follow the conditions and code of conduct!
Technical CTF Information
The CTF runs from 01.03. 18:00 CEST to 01.05. 18:00 CEST.
During this time, challenges will be released on the 01.03. at 18:00 as well as on the 01.04. at 18:00.
All challenges can be solved until the last minute of the CTF (though when the system stops taking your flag, there is no "but it wasn't 18:00 on my machine", so make sure you don't wait for the last second).
You should be placed into the correct bracket (junior
, senior
or open
) depending on the information you provided when registering.
Please double-check your placement as soon as the scoreboards are open and open a ticket on Discord if you were placed incorrectly
Challenges follow dynamic scoring, so they give points based on how many participants solve them. The more participants solve a challenge, the fewer points it gives.
beginner
challenges start at 100 points and go to 50 points after 55 solveseasy
/medium
/hard
challenges start at 500 points and go to 100 points after 55 solves
However, the points you have for a challenge you solved are the same for everybody that has solved it, no matter when each individual solved it.
This means there is no advantage to solving a challenge early or late, but if you're unsure which challenge to solve next, you can try to gauge the difficulty of the challenges by how many points it is currently worth.
The formula used to calculate the points is as follows:
import math
PTS_DELAY = 4
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 / 100)
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)
If you have any questions feel free to open a ticket on Discord!