Snapshot of upstream SQLite 3.40.1
[sqlcipher.git] / ext / wasm / sql / 001-sudoku.sql
blob53661b1c3521dfbfa05f9311372f1ddac04d8711
1 WITH RECURSIVE
2   input(sud) AS (
3     VALUES('53..7....6..195....98....6.8...6...34..8.3..17...2...6.6....28....419..5....8..79')
4   ),
5   digits(z, lp) AS (
6     VALUES('1', 1)
7     UNION ALL SELECT
8     CAST(lp+1 AS TEXT), lp+1 FROM digits WHERE lp<9
9   ),
10   x(s, ind) AS (
11     SELECT sud, instr(sud, '.') FROM input
12     UNION ALL
13     SELECT
14       substr(s, 1, ind-1) || z || substr(s, ind+1),
15       instr( substr(s, 1, ind-1) || z || substr(s, ind+1), '.' )
16      FROM x, digits AS z
17     WHERE ind>0
18       AND NOT EXISTS (
19             SELECT 1
20               FROM digits AS lp
21              WHERE z.z = substr(s, ((ind-1)/9)*9 + lp, 1)
22                 OR z.z = substr(s, ((ind-1)%9) + (lp-1)*9 + 1, 1)
23                 OR z.z = substr(s, (((ind-1)/3) % 3) * 3
24                         + ((ind-1)/27) * 27 + lp
25                         + ((lp-1) / 3) * 6, 1)
26          )
27   )
28 SELECT s FROM x WHERE ind=0;