Let me try again. Some spaces were missing from the input
in the parent post:


/* The input suduko. */
WITH RECURSIVE input(sud) AS (
  VALUES(
'53..7....6..195....98....6.8...6...34..8.3..17...2...6.6....28....419..5....8..79'
  )
),

/* A table filled with digits 1..9, inclusive. */
digits(z, lp) AS (
  VALUES('1', 1)
  UNION ALL SELECT
  CAST(lp+1 AS TEXT), lp+1 FROM digits WHERE lp<9
),

/* The tricky bit. */
x(s, ind) AS (
  SELECT sud, instr(sud, '.') FROM input
  UNION ALL
  SELECT
  substr(s, 1, ind-1) || z || substr(s, ind+1),
  instr( substr(s, 1, ind-1) || z || substr(s, ind+1), '.' )
  FROM x, digits AS z
  WHERE ind>0
  AND NOT EXISTS (
    SELECT 1 FROM digits AS lp
    WHERE z.z = substr(s, ((ind-1)/9)*9 + lp, 1)
    OR z.z = substr(s, ((ind-1)%9) + (lp-1)*9 + 1, 1)
    OR z.z = substr(s, (((ind-1)/3) % 3) * 3
      + ((ind-1)/27) * 27 + lp
      + ((lp-1) / 3) * 6
      , 1)
  )
)

SELECT s FROM x WHERE ind=0;


_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to