In [7]:
#!/usr/bin/env python
# coding=utf-8
import re, os, sys
def SudokuInit():
sudoku = {"(1, 1)": " ", "(1, 2)": "4", "(1, 3)": "3", "(1, 4)": " ", "(1, 5)": "5",
"(1, 6)": " ", "(1, 7)": "6", "(1, 8)": " ", "(1, 9)": " ",
"(2, 1)": " ", "(2, 2)": " ", "(2, 3)": " ", "(2, 4)": "9", "(2, 5)": " ",
"(2, 6)": " ", "(2, 7)": " ", "(2, 8)": " ", "(2, 9)": " ",
"(3, 1)": "8", "(3, 2)": "6", "(3, 3)": " ", "(3, 4)": " ", "(3, 5)": " ",
"(3, 6)": " ", "(3, 7)": " ", "(3, 8)": " ", "(3, 9)": " ",
"(4, 1)": " ", "(4, 2)": " ", "(4, 3)": " ", "(4, 4)": " ", "(4, 5)": "6",
"(4, 6)": " ", "(4, 7)": "1", "(4, 8)": "2", "(4, 9)": " ",
"(5, 1)": " ", "(5, 2)": "5", "(5, 3)": "2", "(5, 4)": " ", "(5, 5)": "3",
"(5, 6)": " ", "(5, 7)": " ", "(5, 8)": " ", "(5, 9)": " ",
"(6, 1)": " ", "(6, 2)": " ", "(6, 3)": "9", "(6, 4)": " ", "(6, 5)": " ",
"(6, 6)": " ", "(6, 7)": " ", "(6, 8)": " ", "(6, 9)": "5",
"(7, 1)": "2", "(7, 2)": " ", "(7, 3)": " ", "(7, 4)": " ", "(7, 5)": " ",
"(7, 6)": " ", "(7, 7)": " ", "(7, 8)": " ", "(7, 9)": " ",
"(8, 1)": " ", "(8, 2)": " ", "(8, 3)": " ", "(8, 4)": "5", "(8, 5)": "7",
"(8, 6)": " ", "(8, 7)": "9", "(8, 8)": " ", "(8, 9)": " ",
"(9, 1)": " ", "(9, 2)": " ", "(9, 3)": "1", "(9, 4)": " ", "(9, 5)": "8",
"(9, 6)": " ", "(9, 7)": "4", "(9, 8)": " ", "(9, 9)": "6"
}
return sudoku
def SquareDict(row_args, col_args):
row_modrlt = int(row_args) % 3
col_modrlt = int(col_args) % 3
row_modict = {"1": [int(row_args) + 1, int(row_args) + 2],
"2": [int(row_args) - 1, int(row_args) + 1],
"0": [int(row_args) - 2, int(row_args) - 1]
}
col_modict = {"1": [int(col_args) + 1, int(col_args) + 2],
"2": [int(col_args) - 1, int(col_args) + 1],
"0": [int(col_args) - 2, int(col_args) - 1]
}
square_dict = {"row": row_modict["%s" %row_modrlt], "col": col_modict["%s" %col_modrlt]}
return square_dict
def SudokuSolver(sudoku): #TODO:sudokusolver
pri_subdict = {}
sec_subdict = {}
for i in range(1, 10):
for j in range(1, 10):
if sudoku["(%s, %s)" %(i, j)] == " ":
sec_subdict.update({"(%s, %s)" %(i, j): " "})
del sudoku["(%s, %s)" %(i, j)]
pri_subdict = sudoku #TODO:solve in sec_subdict
sudoku.update(dict(pri_subdict, **sec_subdict))
while " " in sudoku:
for i in range(1, 10):
for j in range(1, 10):
for k in range(1, 10):
if sudoku["(%s, %s)" %(i, j)] == k:
#match_dict = {"row": str(i), "col": str(j), "num": str(k)}
for m in range(1, 10):
rcs_dict = {}
rcs_dict.update(sudoku["(%s, %s)" %(i, m)])
rcs_dict.update(sudoku["(%s, %s)" %(m, j)])
square_dict = SquareDict(i, j)
for l in square_dict["row"]:
for n in square_dict["col"]:
rcs_dict.update(sudoku["(%s, %s)" %(l, n)])
sudoku.update(dict(pri_subdict, **sec_subdict))
return sudoku
def SudokuPrint(sudoku):
for i in range(3):
print("+-------+-------+-------+")
for j in range(3):
print("| " + sudoku["(%s, %s)" %(3*i+j+1, 1)] + " "
+ sudoku["(%s, %s)" %(3*i+j+1, 2)] + " "
+ sudoku["(%s, %s)" %(3*i+j+1, 3)] + " | "
+ sudoku["(%s, %s)" %(3*i+j+1, 4)] + " "
+ sudoku["(%s, %s)" %(3*i+j+1, 5)] + " "
+ sudoku["(%s, %s)" %(3*i+j+1, 6)] + " | "
+ sudoku["(%s, %s)" %(3*i+j+1, 7)] + " "
+ sudoku["(%s, %s)" %(3*i+j+1, 8)] + " "
+ sudoku["(%s, %s)" %(3*i+j+1, 9)] + " |")
print("+-------+-------+-------+")
if sys.hexversion < 0x20700F0:
print("a higher python version is required")
sys.exit()
sudoku = SudokuInit()
SudokuPrint(sudoku)
print
print("==========================")
print
SudokuSolver(sudoku)
SudokuPrint(sudoku)
In [ ]: