29 lines
892 B
MySQL
29 lines
892 B
MySQL
|
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')
|
||
|
),
|
||
|
digits(z, lp) AS (
|
||
|
VALUES('1', 1)
|
||
|
UNION ALL SELECT
|
||
|
CAST(lp+1 AS TEXT), lp+1 FROM digits WHERE lp<9
|
||
|
),
|
||
|
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;
|