N = 9
tmp = [[0,0,0,2,0,0,0,6,3],
[3,0,0,0,0,5,4,0,1],
[0,0,1,0,0,3,9,8,0],
[0,0,0,0,0,0,0,9,0],
[0,0,0,5,3,8,0,0,0],
[0,3,0,0,0,0,0,0,0],
[0,2,6,3,0,0,5,0,0],
[5,0,3,7,0,0,0,0,8],
[4,7,0,0,0,1,0,0,0]]
# solution: http://w...content-available-to-author-only...u.ws/hard-1-solution.htm
sud = [[int(x) for x in tmp[i]] for i in range(N)]
def check(x, y, val):
if val in [i for i in sud[y]]: ### check row x for val
return 1
if val in [sud[i][x] for i in range(N)]: ### check column y for val
return 1
xbox = int(x/3) * 3
ybox = int(y/3) * 3
for i in range(xbox, xbox+3):
for j in range(ybox, ybox+3):
if val == sud[i][j]: ### check box for val
return 1
return 0
def solve(x = 0, y = 0):
if x == N:
y += 1
x = 0
if y == N:
return 1
if sud[y][x] > 0:
return solve(x + 1, y)
for i in range(1, N+1):
if not check(x, y, i):
sud[y][x] = i
if solve(x + 1, y):
print(sud)
sud[y][x] = 0
return 0
solve(0,0)
TiA9IDkKdG1wID0gIFtbMCwwLDAsMiwwLDAsMCw2LDNdLAoJCVszLDAsMCwwLDAsNSw0LDAsMV0sCgkJWzAsMCwxLDAsMCwzLDksOCwwXSwKCQlbMCwwLDAsMCwwLDAsMCw5LDBdLAoJCVswLDAsMCw1LDMsOCwwLDAsMF0sCgkJWzAsMywwLDAsMCwwLDAsMCwwXSwKCQlbMCwyLDYsMywwLDAsNSwwLDBdLAoJCVs1LDAsMyw3LDAsMCwwLDAsOF0sCgkJWzQsNywwLDAsMCwxLDAsMCwwXV0KIyBzb2x1dGlvbjogaHR0cDovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnUud3MvaGFyZC0xLXNvbHV0aW9uLmh0bQoKc3VkID0gW1tpbnQoeCkgZm9yIHggaW4gdG1wW2ldXSBmb3IgaSBpbiByYW5nZShOKV0KCmRlZiBjaGVjayh4LCB5LCB2YWwpOgogICAgaWYgdmFsIGluIFtpIGZvciBpIGluIHN1ZFt5XV06ICAgICAgICAgICAgICAgICAgIyMjIGNoZWNrIHJvdyB4IGZvciB2YWwKICAgICAgIHJldHVybiAxCiAgICBpZiB2YWwgaW4gW3N1ZFtpXVt4XSBmb3IgaSBpbiByYW5nZShOKV06ICAgICAgICAjIyMgY2hlY2sgY29sdW1uIHkgZm9yIHZhbAogICAgICAgcmV0dXJuIDEKICAgIHhib3ggPSBpbnQoeC8zKSAqIDMKICAgIHlib3ggPSBpbnQoeS8zKSAqIDMKICAgIGZvciBpIGluIHJhbmdlKHhib3gsIHhib3grMyk6CiAgICAgICAgZm9yIGogaW4gcmFuZ2UoeWJveCwgeWJveCszKToKICAgICAgICAgICAgaWYgdmFsID09IHN1ZFtpXVtqXTogICAgICAgICAgICAgICAgICAgICMjIyBjaGVjayBib3ggZm9yIHZhbAogICAgICAgICAgICAgICAgcmV0dXJuIDEKICAgIHJldHVybiAwCgpkZWYgc29sdmUoeCA9IDAsIHkgPSAwKToKICAgIGlmIHggPT0gTjoKICAgICAgICB5ICs9IDEKICAgICAgICB4ID0gMAogICAgICAgIGlmIHkgPT0gTjoKICAgICAgICAgICAgcmV0dXJuIDEKICAgIGlmIHN1ZFt5XVt4XSA+IDA6CiAgICAgICAgcmV0dXJuIHNvbHZlKHggKyAxLCB5KQogICAgZm9yIGkgaW4gcmFuZ2UoMSwgTisxKToKICAgICAgICBpZiBub3QgY2hlY2soeCwgeSwgaSk6CiAgICAgICAgICAgIHN1ZFt5XVt4XSA9IGkKICAgICAgICAgICAgaWYgc29sdmUoeCArIDEsIHkpOgogICAgICAgICAgICAgICAgcHJpbnQoc3VkKQogICAgc3VkW3ldW3hdID0gMAogICAgcmV0dXJuIDAKICAgIApzb2x2ZSgwLDAp