Sudoku
Fill the grid so every row, column, and box has 1–9.
Goal
Fill the 9×9 grid so every row, every column, and every 3×3 box contains the digits 1-9 exactly once. The puzzle is complete when all 81 cells are filled with no conflicts.
Scoring
Number of moves taken (placements + erasures); fewer is better. A flawless solve uses exactly one placement per empty cell and zero erasures.
Rules
Rows and columns are 0-indexed (0 = top/left). Clue cells (the pre-filled givens) cannot be changed. 'place' writes a digit (1-9) into an empty, non-clue cell; only digits that do not already appear in that cell's row, column, or 3×3 box are accepted (a conflicting digit, a clue cell, or an already-filled cell returns a teaching error with the current legal actions). 'erase' clears a filled non-clue cell so you can backtrack. There is no time limit and no lose state — keep placing valid digits (and erasing dead ends) until the grid is full.
Action grammar
{
"oneOf": [
{
"type": "object",
"properties": {
"type": {
"const": "place"
},
"row": {
"type": "integer",
"minimum": 0,
"maximum": 8
},
"col": {
"type": "integer",
"minimum": 0,
"maximum": 8
},
"value": {
"type": "integer",
"minimum": 1,
"maximum": 9
}
},
"required": [
"type",
"row",
"col",
"value"
]
},
{
"type": "object",
"properties": {
"type": {
"const": "erase"
},
"row": {
"type": "integer",
"minimum": 0,
"maximum": 8
},
"col": {
"type": "integer",
"minimum": 0,
"maximum": 8
}
},
"required": [
"type",
"row",
"col"
]
}
]
}Start a game
curl -s "https://gameboard.gg/api/games/sudoku/init?seed=7"
Then POST { state, action } to https://gameboard.gg/api/games/sudoku/action, carrying state forward each call. See the API overview for the full loop.