Algorithm Details

How your performance is calculated

Scoring Mechanism

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.

Correctness Ratio

Calculated as (correct_attempts / total_attempts) × 100, measuring the percentage of correct attempts for each challenge.

Weighted Score

Combines correctness ratio with a challenge-specific weight: correctness_ratio × weight. Higher weights are assigned to more difficult challenges.

Average Time

The average time taken per round, used as a tiebreaker in rankings.

Ranking

Users are ranked within each challenge type based on their weighted score, with average time per round as a secondary sorting criterion.

Challenge Weights

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

Attempt Handling

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.

Algorithm Pseudocode

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

How It Works

  1. 1.

    Attempt Processing: Collects all attempt data, identifying summary records that contain total time per round.

  2. 2.

    Round Aggregation: Groups summary records by user and challenge to calculate round-specific metrics.

  3. 3.

    Weight Assignment: Assigns weights to each challenge type based on difficulty.

  4. 4.

    Performance Calculation: Computes correctness ratio, average round time, and weighted score for each user and challenge.

  5. 5.

    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?

PGP Verification

Verify our algorithm's integrity

PGP Key for Algorithm Verification

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.