Every opponent on this site plays from the same information you get: the numbers on the board and the mine counter. None of them can see the layout. The difference between tiers is how much they deduce before clicking, and how often they slip.
| House bot | Strength | Reasoning | Beg. | Int. | Exp. | Pace | Slips |
|---|---|---|---|---|---|---|---|
| Drone drone | Clicks at random, with no reasoning at all. It has never cleared an expert board. | 0% | 0% | 0% | 420ms | 100% | |
| Novice novice | Knows the two beginner rules but forgets to use them about a third of the time. | 46% | 15% | 0% | 340ms | 30% | |
| Casual casual | Reliable basic deduction, but it guesses blindly the moment simple logic runs out. | 74% | 43% | 2% | 250ms | 8% | |
| Sharp sharp | Adds subset reasoning β the 1-2-1 and 1-2-2-1 patterns β and guesses with taste. | 91% | 75% | 17% | 165ms | 2% | |
| Tactician tactician | Exact frontier probabilities on a modest budget. It rarely walks into an avoidable mine. | 97% | 86% | 54% | 110ms | 1% | |
| Grandmaster grandmaster | Full probability solve plus chording. What beats it is real 50/50s, not mistakes. | 97% | 89% | 55% | 60ms | none | |
| Singularity singularity | Exact probabilities, batched deductions, and the best guess on offer. Cheap logic resolves most turns, so it only pays for the full solve when a turn is genuinely a guess. | 97% | 89% | 55% | 25ms | none | |
| Singularity v2 singularity-v2 | Same solver, no reaction delay, and it only takes a guess when the odds are good β under 25%. Worse gambles it declines, which roughly halves how often it detonates. | 95% | 81% | 34% | 0ms | none |
The three percentages are measured clear rates over seeded boards, on beginner, intermediate and expert. Most tiers land within a few points of one another at the top because exact-probability play is close to the ceiling β roughly half of all expert boards force a genuine coin flip that no solver can reason its way out of, and every tier that takes that flip loses about half of them.
Guessing is also why the big boards are carnage. Mine density climbs with size, so forced coin flips pile up: over 40 seeded boards, Singularity detonated on 92.5% of Mega and 100% of Colossal. That is not a flaw in the solver β every one of those boards reached a position with no provable move left.
Singularity v2 is the exception. Same solver, but it declines the coin flip: it plays only proven-safe cells and stands down when nothing is provable. Across 200 seeded boards per size it detonated zero times β beginner through Colossal β while still uncovering 98% / 96% / 71% of the safe squares on beginner, intermediate and expert. Its lower clear rate is entirely boards it refused to gamble on, never a mistake.
Real speed, no fast-forward: each action lands after the time its solver actually spent plus Grandmaster's 60ms reaction pace β the same pace it plays you at in VS mode. It is deciding here in your browser, from the visible board only.
| # | Bot | Author | Elo | Games | Wins | Avg solve |
|---|---|---|---|---|---|---|
| 1 | akorn (sushi7845) | sushi7845 | 1187 | 164 | 34% | 19.41ms |
Elo moves only in the daily championship, where every bot plays the identical seed against its opponent.
Your script is a plain JavaScript source file that defines move(state, helpers). It runs in a worker with no network, no filesystem and no timers you can rely on β just the board.
width, height, mines β board definition.view β Int8Array of width*height: -1 hidden, -2 flagged, 0..8 the revealed count.flagsPlaced, moveIndex, seed.neighbors(i) β adjacent indices.hidden(), flagged() β index lists.constraints() β [{ need, vars }], meaning exactly need of vars are mines. This is the whole game, restated.xy(i), index(x, y), HIDDEN, FLAGGED.One action or an array of them: { k: 'open' | 'flag' | 'chord', i }. A bare number is treated as open. Batch as many as you like per turn β deducing ten cells at once costs one turn, not ten.
For bots a flag marks and never clears, and duplicate actions inside one batch are dropped, so it is safe to emit the same cell from two different constraints. Invalid actions are skipped, and four consecutive turns without changing the board ends the game as a stall.
The ladder scores a match on whether you cleared the board and, if both of you did, who spent less time thinking. βThinkingβ means your move() call and nothing else β timed inside the sandbox, so the message round trip is not charged to you.
helpers.neighbors is precomputed before the clock starts. Use it rather than building your own adjacency table.move() calls. Cache anything that depends only on the board shape.Once uploaded, use Watch your bot above to see it play β the move log comes back from the sandbox and is replayed at the speed it really ran. Want the strong solver as a reference? POST /api/bot/solve returns exact per-cell mine probabilities for any position. See the API page.