Match-3 Adventure

Swap two tiles, clear a line of 3, and watch the board fall into itself. Lines of 4 and 5 leave charges behind, cargo has to be walked down to the floor, and the 24-level campaign is the part worth saying out loud: every move budget in it was found by playing the level, not by picking a number that looked about right.

The campaign’s difficulty was measured, not chosen

Nothing on this route decides that a level is “medium”. Each of the 24 levels has a fixed board and fixed objectives, and its move budget was found by bisection: the solver played it 40 times at each candidate budget, and the budget whose win rate landed closest to the ladder’s target was the one kept. The target falls from about 92% to about 50%, with every fifth level set slightly easier so the ladder reads as steps rather than as a grind.

The budgets that came out are 15 to 62 moves and they are deliberately not in increasing order. A level with cargo to deliver needs far more moves than a harder level without it, and a ladder that hid that behind tidy round numbers would be lying about which levels are hard.

It is worth saying why this is not over-engineering. A match-three’s difficulty is not a property of the level: it is a property of the level, the objectives, the budget and the generator together, and a target 30% too high looks exactly like one that is right. This programme has shipped a difficulty ladder inverted twice, both times with numbers that read perfectly sensibly. Measuring is the only thing that has ever caught it.

The solver is not allowed to see what falls next

Evaluating a move means playing it on a copy of the board — and if that copy runs on the game’s own generator, the tiles that fall into it are the exact tiles that will really fall. The solver then picks the luckiest cascade, every time, out of a stream the player cannot see. That is not a stronger opponent, it is a rigged one, and it is worth measuring rather than arguing about: allowed to read the real stream, the same solver scores 29% more.

So every evaluation runs on a scratch generator seeded from the position, and thinking harder means averaging over more possible futures rather than peeking at the real one. Every candidate move in a given sample is judged against the same imagined future too — comparing one move under one future against another move under a different one measures the difference between the futures as well as the moves, and the futures vary far more.

One shape makes one charge, by a published order

A match is a shape, not a line. A T is two lines sharing a cell and it is one match: it clears once, scores once and leaves one charge. A line of 5 that also turns a corner is a five, a four and an L simultaneously, so the order is published rather than left to whichever check happens to run first — rarest wins. Prism, then burst, then beam.

A charge is worn by an ordinary tile rather than replacing it, so a charged tile still has a colour, still matches, and can still be caught in someone else’s blast. That one decision removes a whole family of rules, and it is why a beam that clears a burst that clears two prisms is ordinary play rather than a special case.

No dead board, and no frozen tab either

After every cascade the board is checked for a legal move, inside the resolver, so nothing upstream can forget. If there is none it is laid out again from the same tiles — the same counts of the same colours, charges riding with their tiles, cores left in their columns. A reshuffle that rolled fresh tiles would be handing out or confiscating objective progress invisibly.

The layout is constructed rather than sampled, and that is not a performance decision. Shuffling until the board is acceptable is a loop with no proof it exits: past a certain share of one colour, no arrangement is free of a line of 3, so every attempt fails and the tab freezes inside a rules engine that is working perfectly.

Local play

Everything runs in this browser. There is no sign-in, no leaderboard and no account: settings, a best for each mode where scores are comparable, campaign progress, the last month of Daily results and a run in progress live in local storage under this route’s own keys, and clearing this game’s data leaves every other Zerdly tool alone. There are no lives, no energy meter and nothing to buy. A run you leave resumes exactly where it was, and resumes there again if you reload — the save is taken after a move settles, never during one.

Questions

What actually makes a swap legal?
It has to make a line of 3 or more of one colour. A swap that would make nothing simply does not happen — the tiles stay where they are and you have not spent a move. The single exception is charge against charge: swap two charged tiles together and both go off whether or not a line forms. That is the only move in the game you spend rather than find, and it is bounded, because you have to earn two charges and walk them together first.
Which charge do I get when a shape is several shapes at once?
A line of 5 that also turns a corner is a five, a four and an L all at the same time, and every reading is defensible — which is exactly why the order is published rather than left to whichever check runs first. The rarer shape wins: a prism (5 in a line, takes every tile of its colour), then a burst (a line that turns a corner, takes the nine tiles around it), then a beam (exactly 4, clears its row or column). One shape makes one charge, never two.
Where does the new charge appear?
On the tile you moved, whenever that tile was part of the shape. The one cell in the shape whose position you chose is the one you get to keep, which is what makes a four you set up deliberately different from a four a cascade happened to drop on you. Only when a shape forms with no finger anywhere near it does the rule fall back to geometry — the corner cell of an L, or the middle of the longest line.
How is the campaign's difficulty decided?
By playing it. Each of the 24 levels has a fixed board and fixed objectives, and its move budget was found by bisection: the solver played the level 40 times at each candidate budget, and the budget whose win rate landed closest to the ladder's target was kept. The target runs from about 92% at the start to about 50% at the end, with a slightly easier level every fifth one so the ladder is a set of steps rather than a grind. Budgets range from 15 to 62 moves, and they are not in increasing order — a level with cargo to deliver needs a bigger budget than a harder level without it.
Why not just write sensible move budgets by hand?
Because a match-three's difficulty is not a property of the level. It is a property of the level, the objectives, the budget and the generator together, and no one of those can be reasoned about alone — a target that is 30% too high looks exactly like one that is right. This programme has shipped a difficulty ladder INVERTED twice before, with numbers that read perfectly sensibly on the page. Measuring is the only thing that has ever caught it.
Can the hint see what is about to fall?
No, and that is the single most important rule about it. The obvious way to evaluate a move is to play it on a copy of the board with the game's own generator — but then the tiles that fall into the copy are the exact tiles that will really fall, and the solver picks the luckiest cascade out of a stream you cannot see. Measured, a solver allowed to do that scores 29% more. So every evaluation runs on a scratch generator seeded from the position, and thinking harder means averaging over more possible futures instead of peeking at the real one.
Is the hint the same strength as the thing that rated the levels?
Yes — it is the same solver, playing by the same rules through the same resolver. The brief requires it: "any bot, solver or generator must operate from the same formal rule definitions used by the player". Difficulty changes how many futures it averages over and nothing else; it never alters an outcome that has already been rolled.
What happens if the board runs out of moves?
It is laid out again, from the same tiles. That matters more than it sounds: a reshuffle that rolled 64 fresh tiles would be rerolling how much of your objective colour is left on the board, invisibly, at the moment you are least able to see it happen. The same counts of the same colours come back, charges ride with their tiles, and cores stay in their columns. The check runs after every cascade, inside the resolver, so nothing upstream can forget to do it.
Can a reshuffle get stuck?
Not the way it is built, and the obvious implementation can. Shuffling the tiles and checking the board until it is acceptable is a loop with no proof that it exits — past a certain share of one colour, no arrangement of those tiles is free of a line of 3, so every attempt fails and the tab freezes inside a rules engine that is working perfectly. The layout here is constructed cell by cell with a repair step, and the one case it cannot serve is detected up front rather than discovered by spinning.
What is a core and why does it take so long?
A core is cargo. Nothing clears it — not a match, not a beam, not a prism — and the only way it leaves the board is out of the bottom, so you clear the tiles underneath it and let it fall. It is slow for a reason that is geometric rather than tunable: a move clears about 5.3 tiles spread across 8 columns, so any one column loses about two thirds of a tile per move and a core with 8 rows beneath it cannot reach the floor in under about twelve moves however well it is played. Measured, the solver takes about 17. Running up to 3 at once is what makes it bearable — one at a time costs nearly twice as much per core — and beyond 3 it gets worse again.
Why is there no undo?
Because it would be a reroll wearing a friendlier name. What falls in after a move is determined by the move number, so undoing a swap and replaying it would hand you a fresh roll of the same decision as many times as you liked. For the same reason a run you leave and come back to resumes exactly where it was: the save is taken after a move settles, never during one, and the continuation is a function of the save rather than of how you got there. Reloading twice gives the identical board both times.
Do the modes actually differ, or are they difficulty settings?
They differ in rules. Campaign, Endless, Timed, Daily Board, Relaxed. Campaign is a certified budget against fixed objectives. Endless has no objectives at all and a budget that refills itself — 20 moves to start, one back for every charge you build and every cascade 3 waves deep, up to 40 in hand — so the safe grinding move that is correct everywhere else is the one that ends the run here. Timed gives 90 seconds and no move limit, which is the only mode where thinking costs you something. Daily is one board and one set of objectives for everybody, seeded from the UTC date, with 28 moves. Relaxed removes every way to lose. No two of them share a win condition.
Why do cascades matter so much?
Every wave of a cascade is worth its own depth as a multiplier, up to 6 times — so the fourth wave pays four times what the first did. Without that the best move is always the biggest immediate clear and the game is a search for fours; with it, the best move is often a small clear low on the board that drops four columns onto each other, which is a judgement rather than a lookup. Scoring is 20 a tile and 60 for each charge earned, both multiplied by the depth of the wave, plus 400 for a core delivered.
Is the board readable without colour?
Yes. All 6 kinds have their own silhouette — a hexagon, a triangle, a diamond, a square, a leaf and a ring — so the board scans by shape alone, in greyscale, and on a screenshot that has lost its palette. Charges are marks drawn on top of the colour rather than replacing it, because a charged tile still matches by colour and hiding that would hide the thing that decides what it can do. Objectives carry their shape, their name and a count, and a completed one carries a tick.
What is stored about me?
Nothing that leaves this browser. Settings, a best for each mode where scores are comparable, campaign progress, the last month of Daily results and a run in progress live in local storage under this route's own keys. Clearing this game's data leaves every other Zerdly tool alone. There is no sign-in, no leaderboard and no account, because there is no server to hold one — and no lives, no energy and nothing to buy.

Related interactives

  • Mini Golf Another route where aim decides whether you can and power whether you do.
  • Pool & Billiards The other table where a thin cut costs precision and power at once.
  • Bubble Shooter The site's other colour-matching board, played by angle rather than by swap.
  • Sky Hop One button, and nothing generated that cannot be flown.