Skip to main content

Examples

This page shows complete puzzle files, from a classic grid to variants.

9.1–9.3 are complete files, drawn next to their JSON: hover a rule on either side to find it on the other (they are in the repository as docs/examples/*.json). 9.4 shows a structure; from 9.5 on only rules is shown, the rest is as in 9.1.

9.1 Classic​



Made by the pencilmark generator (unique, graded Easy).

9.2 Killer (4×4)​



Made by the generator (zero givens, unique). describe() names it "Tiny Killer Sudoku".

9.3 Jigsaw (6×6)​



The grid gives the rows and columns; each piece is a box. (A shape example, no givens.)

9.4 Samurai (structure)​

{"format": "sudoku-puzzle", "format_version": 1,
"board": {"rows": 21, "cols": 21},
"digits": 9,
"givens": [
0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0,
…rows 2 to 6 the same…,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
…rows 8 and 9 the same…,
null, null, null, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, null, null, null,
…rows 11 and 12 the same…,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
…rows 14 and 15 the same…,
0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0,
…rows 17 to 21 the same…],
"rules": [
{"type": "box_grid", "origin": "r1c1", "box": [3, 3]},
{"type": "box_grid", "origin": "r1c13", "box": [3, 3]},
{"type": "box_grid", "origin": "r7c7", "box": [3, 3]},
{"type": "box_grid", "origin": "r13c1", "box": [3, 3]},
{"type": "box_grid", "origin": "r13c13", "box": [3, 3]}]}

(… marks rows left out of this document; a real file lists all 441 entries.) The centre grid shares one box with each corner grid; a shared box is one house. Board row 7 holds three separate 9-cell row houses (c1–c9, c7–c15, c13–c21).

9.5 X-sudoku and argyle​

"rules": [
{"type": "box_grid", "origin": "r1c1", "box": [3, 3]},
{"type": "region", "kind": "diagonal", "cells": ["r1c1", "r2c2", "r3c3", "r4c4", "r5c5", "r6c6", "r7c7", "r8c8", "r9c9"]},
{"type": "region", "kind": "diagonal", "cells": ["r1c9", "r2c8", "r3c7", "r4c6", "r5c5", "r6c4", "r7c3", "r8c2", "r9c1"]}]

Argyle has 8 shorter diagonals instead, all region kind diagonal:

"rules": [
{"type": "box_grid", "origin": "r1c1", "box": [3, 3]},
{"type": "region", "kind": "diagonal", "cells": ["r1c2", "r2c3", "r3c4", "r4c5", "r5c6", "r6c7", "r7c8", "r8c9"]},
{"type": "region", "kind": "diagonal", "cells": ["r2c1", "r3c2", "r4c3", "r5c4", "r6c5", "r7c6", "r8c7", "r9c8"]},
{"type": "region", "kind": "diagonal", "cells": ["r1c8", "r2c7", "r3c6", "r4c5", "r5c4", "r6c3", "r7c2", "r8c1"]},
{"type": "region", "kind": "diagonal", "cells": ["r2c9", "r3c8", "r4c7", "r5c6", "r6c5", "r7c4", "r8c3", "r9c2"]},
{"type": "region", "kind": "diagonal", "cells": ["r1c5", "r2c4", "r3c3", "r4c2", "r5c1"]},
{"type": "region", "kind": "diagonal", "cells": ["r1c5", "r2c6", "r3c7", "r4c8", "r5c9"]},
{"type": "region", "kind": "diagonal", "cells": ["r5c1", "r6c2", "r7c3", "r8c4", "r9c5"]},
{"type": "region", "kind": "diagonal", "cells": ["r5c9", "r6c8", "r7c7", "r8c6", "r9c5"]}]

9.6 Thermo, arrow and kropki​

"rules": [
{"type": "box_grid", "origin": "r1c1", "box": [3, 3]},
{"type": "line", "kind": "thermo", "cells": ["r9c1", "r8c1", "r7c1", "r7c2"]},
{"type": "line", "kind": "thermo", "cells": ["r9c1", "r9c2", "r9c3"]},
{"type": "arrow", "bulb": ["r2c2"], "lines": [["r3c3", "r4c4", "r5c5"]]},
{"type": "arrow", "bulb": ["r1c7", "r1c8"], "lines": [["r2c8", "r3c8"]]},
{"type": "edge", "kind": "kropki", "color": "white", "cells": ["r5c7", "r5c8"]},
{"type": "edge", "kind": "kropki", "color": "black", "cells": ["r6c7", "r7c7"]}]

The two thermos share the bulb r9c1. The second arrow's pill reads as 10·r1c7 + r1c8.

9.7 Negative XV​

"rules": [
{"type": "box_grid", "origin": "r1c1", "box": [3, 3]},
{"type": "edge", "kind": "xv", "letter": "X", "cells": ["r1c1", "r1c2"]},
{"type": "edge", "kind": "xv", "letter": "V", "cells": ["r4c5", "r5c5"]},
{"type": "negative", "of": "xv"}]

Every pair without a clue sums to neither 10 nor 5. With {"type": "negative", "of": "xv", "letter": "X"} instead, every X is shown but V clues may be partial. With no XV clues at all, the negative alone is "Non-XV".

9.8 Sandwich, x-sum and little killer​

"rules": [
{"type": "box_grid", "origin": "r1c1", "box": [3, 3]},
{"type": "sandwich", "sum": 12, "side": "left", "cells": ["r3c1", "r3c2", "r3c3", "r3c4", "r3c5", "r3c6", "r3c7", "r3c8", "r3c9"]},
{"type": "xsum", "sum": 24, "side": "top", "cells": ["r1c9", "r2c9", "r3c9", "r4c9", "r5c9", "r6c9", "r7c9", "r8c9", "r9c9"]},
{"type": "sum", "kind": "little_killer", "sum": 15, "side": "top", "cells": ["r1c4", "r2c5", "r3c6", "r4c7", "r5c8", "r6c9"]},
{"type": "sum", "kind": "little_killer", "sum": 9, "side": "bottom", "cells": ["r9c2", "r8c1"]}]

The x-sum reads down column 9: X = r1c9. The first little killer sits above r1c4 and runs down-right; the second sits below r9c2 and runs up-left.

9.9 Anti-knight within boxes only​

"rules": [
{"type": "box_grid", "origin": "r1c1", "box": [3, 3]},
{"type": "neighbours", "kind": "antiknight", "within": "box"}]

Only knight-move pairs inside one box must differ. Without within the rule covers the whole board.