Tilepaint

The grid is cut into tiles. Paint whole tiles — never single cells — so every numbered row and column holds exactly that many painted cells. Rows and columns without a number are free. Click a tile to cycle painted → marked white → empty; right-click erases.

painted tile marked white 3 line wants 3 painted cells 3 line overshot or out of reach

One boolean per tile

A cell here is not a decision — its tile is. The solver keeps one black-or-white variable per tile, and every numbered line becomes a subset-sum constraint over the tile slices that cross it. Tiles crossing several lines couple those constraints: Tilepaint is a nonogram whose lines share variables. With all tiles cut down to single cells the puzzle degenerates into binary tomography — reconstructing a 0/1 matrix from its row and column sums, famously ambiguous — and bigger tiles are exactly the added information that makes answers unique.

One law, three strengths, then a probe

The whole ladder is the same arithmetic law read more and more carefully. count treats a line as an interval: number reached — the rest of the line is white; number equals everything still open — paint it all. edge checks each open tile against the total of the others: a slice bigger than the debt is white, a slice the others cannot cover for is painted. fit asks the exact question: which subsets of the open slices actually compose the debt? A slice in every such subset is painted, in none — white. Slices 2, 2, 2 owing 3 pass every greedy bound and are dead only to fit. probe assumes a color on one tile and watches the rules below refute it.

Where the ambiguity lives

Because every law is arithmetic, a second solution is a set of tiles whose flips cancel on every numbered line — and the smallest ones can be read straight off a finished answer: a painted and an unpainted tile whose slice vectors agree on every numbered line swap silently. A single-tile probe can never refute a two-tile swap, so on this puzzle probe finishes ⇒ unique holds but the converse direction genuinely fails — measured, not assumed, in the repo's statistics.