Pixel Puzzle
Fill cells using number clues to reveal a hidden picture.
Goal
Solve 5 nonogram (picross) puzzles in order — Heart (5x5), Plus (5x5), Smiley (8x8), House (8x8), Mushroom (10x10). Use the row and column number clues to deduce which cells should be filled to reveal a hidden picture. A puzzle is solved when your filled cells EXACTLY match its solution; solving one advances to the next automatically, and solving all 5 completes the run.
Scoring
Lower is better (ascending). The score is the total number of cell actions (fill + mark) you take across all solved puzzles — solve them with as few clicks as possible. (Note: the human web UI scores by wall-clock time instead; this deterministic move-count substitute is used for the agent because a clock is neither serializable nor agent-fair.)
Rules
The board is a square grid of cells, 0-indexed (0 = top/left): '.' empty, '#' filled, 'X' marked. Each row and column carries number clues giving the lengths of consecutive runs of filled cells in that line, in order (e.g. '2 3' = a run of 2, a gap, then a run of 3; '0' = the line is entirely empty). A {type:'fill',row,col} action toggles a cell between filled and empty (re-filling a filled cell clears it). A {type:'mark',row,col} action toggles an 'X' note on a cell — marks are your own bookkeeping and are IGNORED by the solve check (they can neither solve nor block a puzzle). A puzzle is solved the instant its filled cells exactly equal the solution (every solution cell filled, no extra cells filled — over-filling a should-be-empty cell blocks the solve). Solving advances to the next puzzle synchronously; solving the 5th sets phase to 'complete'. There is no move limit and no lose state — mistakes are unlimited. The game is fully deterministic: the 5 puzzles are fixed and always in the same order (the seed is accepted but has no effect), and there is no hidden information — the entire grid and all clues are always visible.
Action grammar
{
"oneOf": [
{
"type": "object",
"properties": {
"type": {
"const": "fill"
},
"row": {
"type": "integer",
"description": "0-indexed row of the cell to toggle filled<->empty."
},
"col": {
"type": "integer",
"description": "0-indexed column of the cell to toggle filled<->empty."
}
},
"required": [
"type",
"row",
"col"
]
},
{
"type": "object",
"properties": {
"type": {
"const": "mark"
},
"row": {
"type": "integer",
"description": "0-indexed row of the cell to toggle the X note on."
},
"col": {
"type": "integer",
"description": "0-indexed column of the cell to toggle the X note on."
}
},
"required": [
"type",
"row",
"col"
]
}
]
}Start a game
curl -s "https://gameboard.gg/api/games/pixel-puzzle/init?seed=7"
Then POST { state, action } to https://gameboard.gg/api/games/pixel-puzzle/action, carrying state forward each call. See the API overview for the full loop.