rCTF Docs
Overview

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 # Default

Each 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:

FieldDescription
minPointsMinimum points for the challenge (floor)
maxPointsMaximum points for the challenge (ceiling, when 0 solves)
solvesCurrent number of solves
maxSolvesMaximum solves across all challenges (used by scores/legacy)
eventStartTimeCompetition start time (used by scores/jammy)
eventEndTimeCompetition end time (used by scores/jammy)
firstSolveTimeTime of the first solve for the challenge (used by scores/jammy)

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.

scores/classic score decay scores/classic shown against the other solve-based scoring curves as challenge solves increase from 0 to 50. 0 100 200 300 400 500 0 10 20 30 40 50 Solves Points
scores/classic scores/sekai scores/steep scores/genni scores/legacy

The default scoring algorithm. Uses a logistic decay function that drops points as more teams solve the challenge.

scoreProvider:
name: scores/classic

Challenges 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.

scores/sekai score decay scores/sekai shown against the other solve-based scoring curves as challenge solves increase from 0 to 50. 0 100 200 300 400 500 0 10 20 30 40 50 Solves Points
scores/classic scores/sekai scores/steep scores/genni scores/legacy

Logarithmic decay with tuned constants (gradient=10, decay=60). Produces a gentler curve than scores/classic.

scoreProvider:
name: scores/sekai
scores/steep score decay scores/steep shown against the other solve-based scoring curves as challenge solves increase from 0 to 50. 0 100 200 300 400 500 0 10 20 30 40 50 Solves Points
scores/classic scores/sekai scores/steep scores/genni scores/legacy

Similar to scores/classic but with a steeper decay curve. Points drop more aggressively with early solves, so challenges differentiate faster.

scoreProvider:
name: scores/steep
scores/jammy first-solve scoring Time-based providers score a challenge from when its first solve occurs during the event. 100 200 300 400 500 0 20 40 60 80 100 Event elapsed before first solve (%) Points
scores/jammy

Time-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.8
OptionDefaultDescription
maximumScoreTime0.8Fraction of event duration used to ramp from minimum to maximum points. First solves after this threshold receive maximum points.
Note

This provider needs startTime and endTime set in the configuration. It uses the first solve time to anchor the scoring curve.

scores/genni score decay scores/genni shown against the other solve-based scoring curves as challenge solves increase from 0 to 50. 0 100 200 300 400 500 0 10 20 30 40 50 Solves Points
scores/classic scores/sekai scores/steep scores/genni scores/legacy

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/genni
scores/legacy score decay scores/legacy shown against the other solve-based scoring curves as challenge solves increase from 0 to 50. 0 100 200 300 400 500 0 10 20 30 40 50 Solves Points
scores/classic scores/sekai scores/steep scores/genni scores/legacy

Hyperbolic tangent-based decay that normalizes against the maximum solve count across all challenges. This was the original rCTF scoring algorithm.

scoreProvider:
name: scores/legacy
Note

This provider needs maxSolves (the maximum solve count across all challenges) to normalize the curve. Expect surprising results if challenge solve counts vary widely.

Esc

Start typing to search the docs.