Scoring providers
Choose and configure a dynamic scoring algorithm for your CTF.
Scoring providers control how challenge point values change as teams solve them. rCTF ships six scoring algorithms.
Configuration#
scoreProvider: name: scores/classic # DefaultEach challenge sets a point range via points.min and points.max in its data. The scoring provider calculates the current point value from the solve count and other context.
Score context#
All scoring providers receive a context object with:
Providers#
Charts use a sample challenge with minPoints: 100 and maxPoints: 500. Solve-based providers show the full provider family with the current tab highlighted, while scores/jammy uses its own time-based curve.
The default scoring algorithm. Uses a logistic decay function that drops points as more teams solve the challenge.
scoreProvider: name: scores/classicChallenges start at maxPoints with zero solves and decay toward minPoints as the solve count climbs. The decay curve is moderate, which works for most CTFs.
Logarithmic decay with tuned constants (gradient=10, decay=60). Produces a gentler curve than scores/classic.
scoreProvider: name: scores/sekaiSimilar to scores/classic but with a steeper decay curve. Points drop more aggressively with early solves, so challenges differentiate faster.
scoreProvider: name: scores/steepTime-based scoring that values challenges by when they were first solved. Unlike the other providers, this one looks at the first solve time relative to the event duration rather than how many teams solved the challenge.
scoreProvider: name: scores/jammy options: maximumScoreTime: 0.8 # Optional, default 0.8Note
This provider needs startTime and endTime set in the configuration. It uses the first solve time to anchor the scoring curve.
A binary scoring algorithm. It returns maxPoints if the challenge has 0 to 2 solves, and 0 points otherwise. Good for challenges that shouldn’t contribute to the score once they’re widely solved.
scoreProvider: name: scores/genniHyperbolic tangent-based decay that normalizes against the maximum solve count across all challenges. This was the original rCTF scoring algorithm.
scoreProvider: name: scores/legacyNote
This provider needs maxSolves (the maximum solve count across all challenges) to normalize the curve. Expect surprising results if challenge solve counts vary widely.