Dosun-Fuwari
The white cells are cut into rooms. Put exactly one balloon and one iron ball in every room. Balloons are light and float, so a balloon has to sit in the top row, or directly under a black cell, or directly under another balloon. Iron balls are heavy and sink, so an iron ball has to sit in the bottom row, or directly over a black cell, or directly over another iron ball. Click a cell to cycle it through balloon, iron ball, empty.
the board
The grid is a decoy
A balloon needs a balloon or a cap directly above it. An iron ball needs an iron ball or a cap directly below it. Both clauses only ever mention a piece of the same kind, and that one detail collapses the whole board.
Take any maximal vertical strip of white cells — call it a run.
It is capped at both ends by construction, by a black cell or by the edge of
the grid. Inside it the balloons have to be a prefix and the iron
balls a suffix, because a balloon can only be held by the balloon
above it and an iron ball only by the iron ball below. So a run of length
L has exactly the states (b, s) with
b + s ≤ L — (L+1)(L+2)/2 of them, the triangular
numbers, A000217 — and the placement
space of a whole board is the product over its runs. Nothing about
where the cells are matters, only how long the strips are.
A shipped 8×8 has 10.7 runs and about 1013 placements before the rooms say a word; a 12×12 has 22.2 runs and 1028.4. The solver never looks at a cell. It carries one small list per run and crosses them off.
The rule as it is usually restated is a different puzzle
The wording that gets passed around drops "another balloon" for "another piece": a balloon may be held down by an iron ball, an iron ball held up by a balloon. It sounds like the same rule said more briefly. It is not. It makes an iron ball resting on a balloon that is hanging from that same iron ball legal, with nothing under either of them, and once that is allowed a run's states stop being a prefix and a suffix and become A095263, the Pisot sequence E(3,7).
| run length | official | loose reading | no stacking |
|---|---|---|---|
| 1 | 3 | 3 | 3 |
| 2 | 6 | 7 | 4 |
| 3 | 10 | 16 | 4 |
| 4 | 15 | 37 | 4 |
| 5 | 21 | 86 | 4 |
| 6 | 28 | 200 | 4 |
| 7 | 36 | 465 | 4 |
| 8 | 45 | 1,081 | 4 |
| 9 | 55 | 2,513 | 4 |
| 10 | 66 | 5,842 | 4 |
| 11 | 78 | 13,581 | 4 |
| 12 | 91 | 31,572 | 4 |
On an 8×8 that is 1019.2 placements instead of 1013, and it shows: of the 36 shipped 8×8 boards, 0 have a unique answer under the loose reading — every one of them ran past the 5,000-answer counting cap. Even on 6×6 boards small enough to count out, 40 unique puzzles turned into 0 unique puzzles, the smallest answer count being 3,264. The informal wording does not make the puzzle easier. It deletes it.
A run-top is always a legal balloon, and that decides everything
The top cell of a run leans directly on a cap, so putting a balloon there is
legal whatever else is on the board. Same for the bottom cell and an
iron ball. Now count: if every room contains at least one run-top, then every
room picks its balloon from its own tops, and nothing any other room does can
stop it. The choices are independent, and a board with Ti
tops and Bi bottoms in room i has exactly
∏Ti · ∏Bi answers.
That is a prediction, so it was measured rather than assumed: 225 of 225 boards with no starved room had exactly the predicted number of answers, and 0 had more. On the 650 boards that did starve a room, the formula was right 0 times — it is not an approximation that degrades, it is a different regime.
The consequence is the whole design problem of this puzzle. A unique board needs every product term to be 1, so every room holds exactly one run-top and one run-bottom, so there are exactly as many rooms as runs — and then the answer is "every run-top is a balloon, every run-bottom is an iron ball", writable without reading the rooms at all. Uniqueness and interest pull in opposite directions unless a room is starved: given no run-top whatsoever, so that its balloon has to be stacked on a balloon that lives in some other room, which reaches across and pins that room's choice too.
All 72 boards here are built that way — 8×8 with a median of 3 starved rooms, 12×12 with 6 — and the ablation is blunt: a solver that never stacks a piece on its own kind finds no answer at all on 72 of 72 of them.
The dial is the number of starved rooms
The generator draws the trivial board first — one room per run — and then starves rooms one at a time, handing a run's top cell to a neighbouring room and forcing the room left behind to stack. Each starved room is a chance to lose uniqueness, and the cost is measurable.
| starved | drawn | unique | rate |
|---|---|---|---|
| 0 | 220 | 220 | 100.0% |
| 1 | 220 | 200 | 90.9% |
| 2 | 220 | 185 | 84.1% |
| 3 | 216 | 157 | 72.7% |
| 4 | 153 | 112 | 73.2% |
That table is 8×8. The ceiling is not the uniqueness rate but the drawing itself: past 4 the board simply runs out of runs long enough and adjacent enough to starve, which is why the 8×8 boards here stop at four. A 12×12 has 22.2 runs and gets to eight, still at 55.1%.
Boards do not happen by accident
Draw black cells at random, cut the white cells into random connected rooms, and ask for an answer:
| board | black | drawn | no answer | one | more |
|---|---|---|---|---|---|
| 6×6 | 0 | 600 | 600 | 0 | 0 |
| 6×6 | 0.12 | 600 | 594 | 0 | 6 |
| 8×8 | 0 | 600 | 600 | 0 | 0 |
| 8×8 | 0.12 | 600 | 599 | 0 | 1 |
| 8×8 | 0.2 | 600 | 596 | 0 | 4 |
| 10×10 | 0.15 | 600 | 600 | 0 | 0 |
3,589 of 3,600 random boards have no answer at all and 0 have exactly one. The room constraint is far tighter than it looks — every room needs a cell it can reach with a prefix and a cell it can reach with a suffix — so the generator has to draw the answer first and cut the rooms around it. It never checks the placement rules at all: it only ever puts a balloon at the top of a run and an iron ball at the bottom, and those are legal by position.
The ladder
Four rungs, each a strictly stronger propagator over the same per-run domains.
run— the run states and nothing else, no propagation.room— one balloon and one iron ball per room: a run state that drops two of a kind into one room is dead, and a room only one run can serve forces that run.profile— a piece pinned in one room cuts its whole run, so the rest of the run's cells lose that option in every other room they touch.probe— singleton consistency: assume one run state, propagate, drop it if that alone contradicts.
The split falls exactly on the structure above. Of 150
generated boards with no starved room, all of them finish at
room — counting alone, with no reference to floating or sinking.
Every one of the 72 shipped boards needs profile,
and none of them needs probe or any search. Starving one room
moves a board a whole rung, and no further.
Two engines
The run reduction is the load-bearing claim in this repository, so it is
checked against an engine that does not know about it: a plain backtracker that
picks a balloon cell and an iron ball cell in every room by exhaustion and
validates the finished grid cell by cell. On boards small enough for it to
finish, the two engines return the same answer set, not just the same
count. The tests also enumerate every one of the 3L
fillings of a single column and check that the surviving ones are exactly the
(L+1)(L+2)/2 states — under both readings of the rule.