mirror of
https://github.com/hastagAB/Awesome-Python-Scripts.git
synced 2024-12-18 08:10:17 +00:00
45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
|
def printsudoku(sudoku):
|
||
|
print("\n\n")
|
||
|
for i in range(len(sudoku)):
|
||
|
line = ""
|
||
|
if i == 3 or i == 6:
|
||
|
print("---------------------")
|
||
|
for j in range(len(sudoku[i])):
|
||
|
if j == 3 or j == 6:
|
||
|
line += "| "
|
||
|
line += str(sudoku[i][j])+" "
|
||
|
print(line)
|
||
|
print("\n\n")
|
||
|
|
||
|
def findNextCellToFill(sudoku):
|
||
|
for x in range(9):
|
||
|
for y in range(9):
|
||
|
if sudoku[x][y] == 0:
|
||
|
return x, y
|
||
|
return -1, -1
|
||
|
|
||
|
def isValid(sudoku, i, j, e):
|
||
|
rowOk = all([e != sudoku[i][x] for x in range(9)])
|
||
|
if rowOk:
|
||
|
columnOk = all([e != sudoku[x][j] for x in range(9)])
|
||
|
if columnOk:
|
||
|
secTopX, secTopY = 3*(i//3), 3*(j//3)
|
||
|
for x in range(secTopX, secTopX+3):
|
||
|
for y in range(secTopY, secTopY+3):
|
||
|
if sudoku[x][y] == e:
|
||
|
return False
|
||
|
return True
|
||
|
return False
|
||
|
|
||
|
def solveSudoku(sudoku, i=0, j=0):
|
||
|
i, j = findNextCellToFill(sudoku)
|
||
|
if i == -1:
|
||
|
return True
|
||
|
for e in range(1, 10):
|
||
|
if isValid(sudoku, i, j, e):
|
||
|
sudoku[i][j] = e
|
||
|
if solveSudoku(sudoku, i, j):
|
||
|
return True
|
||
|
sudoku[i][j] = 0
|
||
|
return False
|