Skip to main content
PuzzleDaily

Methodology

How PuzzleDaily generates, validates, and publishes each day's puzzles. We document this in detail because every published puzzle is meant to be reproducibly correct, fair to all players, and free of guess-and-check positions that turn a deduction game into a lottery.

Generation

Each game on PuzzleDaily — Crossword, FlipArt, Nonogram, SpellTower, and TypeShift — has its own generator program. Generators run automatically once per UTC day at 00:00 UTC. They are seeded deterministically from the date so that the same calendar day produces the same puzzle for every player. There is no per-region rotation, no A/B variation, and no human curator selecting puzzles from a backlog.

Source data is public-domain. Word games draw from the open-source Scrabble word list (TWL or SOWPODS depending on the game), filtered against a community-maintained block-list to exclude offensive terms. Number games draw from straightforward integer constraints (prime sequence, digit-position constraints, parity rules). Geography games (when applicable) draw country geometries and centroids from OpenStreetMap.

Validation

Every generated puzzle is solved by our in-house solver before publication. The solver does what a careful human solver does: applies logical deduction from the published clues without guessing. A puzzle that the solver cannot fully resolve gets rejected and regenerated. A puzzle that admits multiple valid solutions also gets rejected. The published puzzle is one we have proven solvable through deduction alone.

Word puzzles get an additional validation pass against the corpus we publish them against. If the generator accepts a word as valid but the corpus excludes it (or vice versa), the puzzle is rejected. This catches a class of subtle bugs where the generator and the published dictionary drift apart between releases.

Difficulty calibration

A small pilot-tester group solves each candidate puzzle before it goes live. We publish the puzzle only if its pilot solve metrics (median solve time, median number of guesses, solve-rate across pilot testers) fall inside the published difficulty band for the target day of the week. Mondays through Wednesdays are calibrated easier; Thursdays through Sundays harder.

The pilot pool is small (~20 testers per game) and biased toward regular puzzle players. That means an individual published puzzle can hit a corpus or pattern unfamiliar to a typical player and run harder than the calibration suggests. We treat persistent solve-rate drops below 50% on a single day as a calibration issue worth flagging in the next release; the published puzzle itself is not corrected after the fact because rolling back a published puzzle would be unfair to players who already solved.

Limits of what this process can and cannot guarantee

The validation pipeline catches three classes of problem: puzzles with no solvable path, puzzles with multiple valid solutions, and puzzles whose accepted vocabulary mismatches the published corpus. It does not catch every possible quality issue. Specifically:

When a player surfaces one of these issues, we update the generator constraints for future days rather than retroactively edit the published puzzle. The aim is consistency over perfection in any given day.

Data sources and licensing

The Scrabble word lists used by the word games are open-source — TWL (Tournament Word List) and SOWPODS are publicly available. We use them under the terms of their published distribution licenses. The OpenStreetMap data used by geography games is licensed under the Open Database License (ODbL); attribution is included in the page footer where OSM data appears.

Per-puzzle answer keys are not source data; they are computed by the generator from the source corpora. The generator code is open-source on github.com/timcadair so that any player can inspect the generation logic, audit the validator, or fork the project.

Frequently asked questions

How are PuzzleDaily puzzles generated?

Each game has a deterministic generator that runs once per UTC day from a fixed seed derived from the date. Generators draw from public-domain corpora (Scrabble word list for word games, prime sequence for number games, OpenStreetMap country geometries for geography). No human curation per-puzzle — the system is built so the same UTC day produces the same puzzle for every player worldwide.

How do you make sure a puzzle has a unique solution?

Every generated puzzle runs through an in-house solver before publishing. The solver attempts to derive the solution using only logical deduction from the published clues; puzzles that require guess-and-check or that admit multiple valid solutions are rejected and regenerated. The solver works backward from the answer to confirm there is exactly one solvable path.

How is puzzle difficulty calibrated?

A small pilot-tester group solves each puzzle before it goes live and reports solve time and number of guesses. The generator picks puzzles whose pilot solve metrics fall within the published difficulty band for the day of the week (easier Monday-Wednesday, harder Thursday-Sunday). Difficulty can still vary on individual days when a puzzle hits an unusual edge case the pilot pool did not cover.

What if I find a valid solution the system rejects?

Tell us at hello@puzzledaily.org. Word-game corpora occasionally exclude valid English words because the Scrabble tournament dictionary omits them or because the block-list filters out a term that shares letters with a blocked word. We publish corrections within 24 hours when a player surfaces a real false-rejection, credited to the player who reported it (with consent).

Are PuzzleDaily puzzles archived?

Yes. Every published puzzle stays accessible at its dated archive URL indefinitely. Players can replay any past day's puzzle, share archive URLs with friends, or use the archive as practice without burning a streak.

How is the daily streak calculated?

Streak is incremented when a player completes any of the day's games before the UTC day rollover. Streak is reset to zero on the first missed day. The streak counter lives in browser localStorage by default; cross-device sync requires opting into an account (free).