Sunflowers
Difficulty tuning
A Medium grid must force at least this many two-clue subset moves. Raise for meatier Mediums.
A Hard grid must force at least this many two-clue overlap moves (plus at least one subset move).
An Extreme grid must force at least this many what-if moves — assume a square, watch a clue break. The deepest logic in the game.
At least one what-if must need a chain this long (in counting steps). 1-step chains feel like overlap moves; 2+ guarantees a genuinely deep moment. Capped by MAX_WHAT_IF_FIRINGS.
Insane grids always exceed Extreme's chain cap. Raise this to additionally demand either-way moves — pivots where both hypotheses survive yet agree on another square. The rarest logic in the game; expect closest-match flags above 1.
How difficulty works
Every grid you generate is solved end-to-end by the same logic engine that powers the in-game hints. It plays through the whole puzzle one deduction at a time, always taking the simplest move available — exactly like a careful human — and records which reasoning techniques the grid forced it to use. There are five, and each tier is named after the hardest one the grid demands:
- Basic → Easy — a single clue settles its own squares: either it's already satisfied, so its remaining squares must all be empty, or it has exactly as many unknowns left as flowers it still needs.
- Subset → Medium — two clues compared, where every unknown one clue sees is also seen by the other. Subtracting one from the other settles the squares only the bigger clue sees.
- Overlap → Hard — two clues share some squares, and min/max bounds on how many flowers the shared region can hold settle the squares only one clue sees. Hard grids also always include subset moves.
- What-if → Extreme — cousin of Sudoku's forcing chains: hypothetically plant a flower (or a cross) in a square, follow the simple rules from there, and watch a clue break — too many flowers, or no way left to reach its number. The contradiction proves the square must be the opposite. Chains are capped at a few simple counting steps (
MAX_WHAT_IF_FIRINGS), so every what-if is mentally trackable and no pencil marks are needed. Hints walk you through exactly which square to test and which clue breaks. - Beyond the cap → Insane — the summit. Insane grids demand what-if chains longer than Extreme's cap (up to
INSANE_CHAIN_FIRINGScounting steps), and the solver also wields the either-way technique, cousin of Sudoku colouring: try a pivot square both ways; neither hypothesis breaks anything, but both chains force the same value onto some other square — so it's proven with no contradiction at all. This is the one tier where keeping notes genuinely helps. Hints spell out both kinds: which square to test, and (for either-way) which squares both chains agree on.
The 0–100 score places a grid inside its tier's band — Easy 4–19, Medium 20–39, Hard 40–59, Extreme 60–79, Insane 80–100 — positioned by its sub-metrics: how wide and forgiving the solve is for Easy, the count of forced subset or overlap moves for Medium and Hard, and — for Extreme — the total depth of the what-if chains rather than their count, since a short 1-step what-if plays much like an overlap move while a 4-step cascade is a different beast — and for Insane, the combined work of both branches of every either-way pivot. Bands never overlap, so a 62 is always genuinely harder than a 40.
Estimated time simply adds up the work: about a second per square of routine marking, ~2s to spot each basic deduction, ~14s per subset, ~26s per overlap, ~15s plus ~10s-per-step for each what-if, and ~35s plus per-step costs for each two-chain either-way. The weights live in EST_TIME in the source if the estimates drift from real solve times.
Zero squares follow ZERO_CLUE_RULES: Easy and Medium carry one or two 0 tiles, Hard exactly one, Extreme and Insane none. The generator protects needed 0s during pruning, strips extras first, injects one if a grid comes up short — and rejects anything that still breaks the rules.
The sliders above tighten what a grid must contain before it's accepted. Each click tries up to 90 candidates; if none fits your settings, the closest match is served and flagged under the board — a sign to ease a slider off or move to a bigger board, where demanding grids are more common.