PJ

How We Score Everything (And Why Cheating Is Boring)

TP

The PlayJoy team

Building PlayJoy

A very small team shipping one free puzzle a day for the whole world. We write the product notes and the occasional post-mortem.

Published 2026-09-12 · Updated 2026-10-08 · 9 min read

The full scoring model behind PlayJoy: difficulty constants, time decay, mistake penalties, server-side replay verification and percentile ranking.

A leaderboard is only worth anything if the numbers on it mean something. That is a design problem, not a maths problem, and it is the part of PlayJoy we spent the longest on.

Here is exactly how a run becomes a score, how we verify it, and what we do about people who try to cheat.

Every run is replayed on the server

Your browser does not get to decide your score. When a run finishes, the client sends the raw sequence of actions — moves, flips, clicks, guesses — and the server regenerates the puzzle from the date seed and replays it. If the replay does not produce the claimed result, the run is stored but marked unranked and scores zero.

This also catches the boring failure mode where a client simply posts a large number. Because the server computes the authoritative score itself, an inflated number is detected as a mismatch before it ever reaches the leaderboard.

Difficulty times time, divided by error

The core shape is shared by every game: a difficulty constant for the level, multiplied by a time constant, divided by elapsed seconds, then divided by a penalty term for mistakes. The constants differ per game because a fast Minesweeper board and a fast Nonogram board are not comparable achievements.

The mistake penalty is deliberately steep. We want the leaderboard to reward players who are right, not players who are reckless — a wrong guess should cost more than the seconds it saved.

Percentiles, not raw points

Your ability profile does not use raw score at all. Each run is converted to a percentile against every other run on the same game and level, and those percentiles feed the six dimensions. That means adding a new game does not distort the profile, and a game that happens to produce large numbers does not dominate your rating.

Until a game has enough real runs to rank against, we fall back to a calibrated curve based on the difficulty constant. It is approximate by design and it improves as traffic arrives.

What we do about cheating

There are three layers: replay verification, pace checks and time floors. Pace checks catch the impossible — forty moves in four seconds, or six Memory flips in under a second. Time floors catch the merely implausible, based on the theoretical fastest clear for that board.

We would rather let a few suspicious scores through than reject a legitimate fast player, so the floors are set generously. Nobody has ever won anything on PlayJoy except a position in a table.

FAQ

Can I see my verified run?

Yes — your recent runs on the My results page show which entries were ranked.

Why did my run say unranked?

The server replay did not reproduce the result. It is usually a browser extension interfering with timing.

Put it into practice

Sponsored spot — set NEXT_PUBLIC_AD_PUBLISHER_ID to activate