number=[1,2,3,4,5,6,7,8,9]
def check(i,j,lol):
number=[1,2,3,4,5,6,7,8,9]
opt=set(number)
for k in range(9):
opt.discard(lol[i][k])
opt.discard(lol[k][j])
a=i//3
b=j//3
for q in range(3):
for w in range(3):
opt.discard(lol[a*3+q][b*3+w])
res=list(opt)
#table[(i,j)]=opt
return sorted(res)
def done(lol):
for i in range(9):
for j in range(9):
if lol[i][j] not in number:
return (i,j)
return True
def sudoku(lol):
if done(lol) == True:
return True
else:
i,j=done(lol)
for num in number:
if num in check(i,j,lol) :
lol[i][j]=num
if sudoku(lol)==True:
return True
lol[i][j]=0
return False
def complete_sudoku(lol):
sudoku(lol)
return ( lol)
#print(sudoku(lol))
input1 = [
[5, 3, 0, 0, 7, 0, 0, 0, 0],
[6, 0, 0, 1, 9, 5, 0, 0, 0],
[0, 9, 8, 0, 0, 0, 0, 6, 0],
[8, 0, 0, 0, 6, 0, 0, 0, 3],
[4, 0, 0, 8, 0, 3, 0, 0, 1],
[7, 0, 0, 0, 2, 0, 0, 0, 6],
[0, 6, 0, 0, 0, 0, 2, 8, 0],
[0, 0, 0, 4, 1, 9, 0, 0, 5],
[0, 0, 0, 0, 8, 0, 0, 7, 9]]
c=complete_sudoku(input1)
print(c)
bnVtYmVyPVsxLDIsMyw0LDUsNiw3LDgsOV0gCmRlZiBjaGVjayhpLGosbG9sKToKICAgIG51bWJlcj1bMSwyLDMsNCw1LDYsNyw4LDldICAgIAogICAgb3B0PXNldChudW1iZXIpCiAgICBmb3IgayBpbiByYW5nZSg5KToKICAgICAgICBvcHQuZGlzY2FyZChsb2xbaV1ba10pCiAgICAgICAgb3B0LmRpc2NhcmQobG9sW2tdW2pdKQogICAgYT1pLy8zCiAgICBiPWovLzMKICAgIGZvciBxIGluIHJhbmdlKDMpOgogICAgICAgIGZvciB3IGluIHJhbmdlKDMpOgogICAgICAgICAgICBvcHQuZGlzY2FyZChsb2xbYSozK3FdW2IqMyt3XSkKICAgIHJlcz1saXN0KG9wdCkKICAgICAgICAjdGFibGVbKGksaildPW9wdAogICAgcmV0dXJuIHNvcnRlZChyZXMpICAgICAgICAKZGVmIGRvbmUobG9sKToKICAgIGZvciBpIGluIHJhbmdlKDkpOgogICAgICAgIGZvciBqIGluIHJhbmdlKDkpOgogICAgICAgICAgICBpZiBsb2xbaV1bal0gbm90IGluIG51bWJlcjoKICAgICAgICAgICAgICAgIHJldHVybiAoaSxqKQogICAgcmV0dXJuIFRydWUKCgpkZWYgc3Vkb2t1KGxvbCk6CiAgICAKICAgIGlmIGRvbmUobG9sKSA9PSBUcnVlOgogICAgICAgIHJldHVybiBUcnVlCiAgICBlbHNlOgogICAgICAgIGksaj1kb25lKGxvbCkKICAgIAogICAgZm9yIG51bSBpbiBudW1iZXI6CiAgICAgICAgaWYgbnVtIGluIGNoZWNrKGksaixsb2wpIDoKICAgICAgICAgICAgbG9sW2ldW2pdPW51bQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgc3Vkb2t1KGxvbCk9PVRydWU6CiAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICAgICAgCiAgICAgICAgbG9sW2ldW2pdPTAKICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgCiAKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIApkZWYgY29tcGxldGVfc3Vkb2t1KGxvbCk6CiAgICAKICAgIHN1ZG9rdShsb2wpCiAgICByZXR1cm4gKCBsb2wpICAgCiAgICAjcHJpbnQoc3Vkb2t1KGxvbCkpCgoKaW5wdXQxID0gWwogICAgICAgIFs1LCAzLCAwLCAwLCA3LCAwLCAwLCAwLCAwXSwKICAgICAgICBbNiwgMCwgMCwgMSwgOSwgNSwgMCwgMCwgMF0sCiAgICAgICAgWzAsIDksIDgsIDAsIDAsIDAsIDAsIDYsIDBdLAogICAgICAgIFs4LCAwLCAwLCAwLCA2LCAwLCAwLCAwLCAzXSwKICAgICAgICBbNCwgMCwgMCwgOCwgMCwgMywgMCwgMCwgMV0sCiAgICAgICAgWzcsIDAsIDAsIDAsIDIsIDAsIDAsIDAsIDZdLAogICAgICAgIFswLCA2LCAwLCAwLCAwLCAwLCAyLCA4LCAwXSwKICAgICAgICBbMCwgMCwgMCwgNCwgMSwgOSwgMCwgMCwgNV0sCiAgICAgICAgWzAsIDAsIDAsIDAsIDgsIDAsIDAsIDcsIDldXQogCgpjPWNvbXBsZXRlX3N1ZG9rdShpbnB1dDEpCnByaW50KGMpCg==
[[5, 3, 4, 6, 7, 8, 9, 1, 2], [6, 7, 2, 1, 9, 5, 3, 4, 8], [1, 9, 8, 3, 4, 2, 5, 6, 7], [8, 5, 9, 7, 6, 1, 4, 2, 3], [4, 2, 6, 8, 5, 3, 7, 9, 1], [7, 1, 3, 9, 2, 4, 8, 5, 6], [9, 6, 1, 5, 3, 7, 2, 8, 4], [2, 8, 7, 4, 1, 9, 6, 3, 5], [3, 4, 5, 2, 8, 6, 1, 7, 9]]