How your performance is calculated
Our ranking algorithm evaluates your performance across four challenge types: Logic Master, Math Integral Sprint, Memory Marathon, and Arithmetic Sprint. It considers your accuracy, speed, and participation, with weights applied to reflect challenge difficulty.
Calculated as (correct_attempts / total_attempts) × 100
, measuring the percentage of correct attempts for each challenge.
Combines correctness ratio with a challenge-specific weight: correctness_ratio × weight
. Higher weights are assigned to more difficult challenges.
The average time taken per round, used as a tiebreaker in rankings.
Users are ranked within each challenge type based on their weighted score, with average time per round as a secondary sorting criterion.
Different challenge types are weighted based on their difficulty:
Logic Master: 1.7 - Highest weight due to complex problem-solving
Math Sprint: 1.2 - Moderate complexity for quick calculations
Memory Marathon: 1.0 - Standard difficulty for memory tasks
Arithmetic Sprint: 0.8 - Easiest challenge type
Each challenge attempt is processed as follows:
Attempts are grouped by user and challenge, with summary records identified by specific metadata.
Only correct attempts contribute to the correctness ratio.
Summary records provide total time per round for averaging.
Below is the pseudocode for our ranking algorithm, outlining how performance data is processed:
// Step 1: Collect and process attempt data function processAttempts(participantRecords): attemptsList = [] for each record in participantRecords: if record contains summaryData: roundDuration = extractSummaryTime(record) append {participantId, taskId, taskType, taskName, roundId, attemptCount, roundDuration} to attemptsList else: append {participantId, taskId, taskType, taskName, roundId, attemptCount, isValid, duration} to attemptsList return attemptsList // Step 2: Aggregate summary data for rounds function aggregateRounds(attemptsList): roundData = [] for each summaryRecord in attemptsList where isSummaryRecord: append {participantId, taskId, taskType, taskName, roundId, roundDuration} to roundData return roundData // Step 3: Define task weights function getTaskWeights(taskTypes): weightsMap = {} for each taskType in taskTypes: if taskType is 'Logic Master': weightsMap[taskType] = 1.7 else if taskType is 'Maths Sprint Integral': weightsMap[taskType] = 1.2 else if taskType is 'Memory Marathon': weightsMap[taskType] = 1.0 else if taskType is 'Arithmetic Sprint': weightsMap[taskType] = 0.8 else: weightsMap[taskType] = 1.0 return weightsMap // Step 4: Calculate participant performance function calculatePerformance(roundData, attemptsList, weightsMap): performanceStats = [] for each participant, task in roundData: roundsCount = countDistinct(roundData[participant, task].roundId) totalAttempts = count(attemptsList where participantId = participant and taskId = task and not isSummaryRecord) validAttempts = count(attemptsList where participantId = participant and taskId = task and not isSummaryRecord and isValid) avgRoundTime = average(roundData[participant, task].roundDuration) accuracyRate = (validAttempts / totalAttempts) * 100 if totalAttempts > 0 else 0 weightedPerformance = accuracyRate * weightsMap[taskType] append {participantId, taskId, taskType, taskName, weight, roundsCount, totalAttempts, validAttempts, avgRoundTime, accuracyRate, weightedPerformance} to performanceStats return performanceStats // Step 5: Rank participants function rankParticipants(performanceStats): rankings = [] for each taskType in performanceStats: sortedStats = sort(performanceStats[taskType] by weightedPerformance descending, avgRoundTime ascending) for rank, stat in sortedStats: append {participantId, participantEmail, taskId, taskType, taskName, weight, roundsCount, totalAttempts, validAttempts, accuracyRate, avgRoundTime, weightedPerformance, rank} to rankings return rankings
Attempt Processing: Collects all attempt data, identifying summary records that contain total time per round.
Round Aggregation: Groups summary records by user and challenge to calculate round-specific metrics.
Weight Assignment: Assigns weights to each challenge type based on difficulty.
Performance Calculation: Computes correctness ratio, average round time, and weighted score for each user and challenge.
Ranking: Ranks users within each challenge type based on weighted score, using average round time as a tiebreaker.
Ready to test your skills and climb the leaderboard?
Verify our algorithm's integrity
To ensure the transparency and integrity of our ranking algorithm, we provide a PGP key for verification. You can use this key to verify the authenticity of our algorithm code and any related communications.
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 =mAen -----END PGP PUBLIC KEY BLOCK-----
Use this PGP key to verify signed messages or files related to our ranking algorithm.
Public PGP Key ID: CBF38DA255F0AD867F5B170047ACDC16F8BF96DD
Email: info@axonarena.com
Contact us for instructions on how to use this key or to request signed verification of the algorithm code.