mirror of
https://github.com/Sosokker/sudoku-terminal-game.git
synced 2025-12-18 21:24:05 +01:00
Create code
This commit is contained in:
commit
ee0cfe4e4d
50
code
Normal file
50
code
Normal file
@ -0,0 +1,50 @@
|
||||
def sudoku_solver(puzzle):
|
||||
sudoku_dict = {}
|
||||
r = 'ABCDEFGHI'
|
||||
c = '123456789'
|
||||
for i in range(9):
|
||||
for j in range(9):
|
||||
sudoku_dict[r[i]+c[j]] = str(puzzle[i][j]) if puzzle[i][j] != 0 else c
|
||||
square = [[x+y for x in i for y in j] for i in ('ABC','DEF','GHI') for j in ('123','456','789')]
|
||||
peers = {}
|
||||
for key in sudoku_dict.keys():
|
||||
value = [i for i in square if key in i][0]
|
||||
row = [[x+y for x in i for y in j][0] for i in key[0] for j in c]
|
||||
col = [[x+y for x in i for y in j][0] for i in r for j in key[1]]
|
||||
peers[key] = set(x for x in value+row+col if x != key)
|
||||
for i in range(9):
|
||||
sudoku_dict = Check(sudoku_dict,peers)
|
||||
sudoku_dict = search(sudoku_dict, peers)
|
||||
solution = []
|
||||
for i in r:
|
||||
solution.append([])
|
||||
for j in c:
|
||||
solution[r.find(i)].append(int(sudoku_dict[i+j]))
|
||||
return solution
|
||||
|
||||
def Check(sudoku_dict, peers):
|
||||
for k,v in sudoku_dict.items():
|
||||
if len(v) == 1:
|
||||
for s in peers[k]:
|
||||
sudoku_dict[s] = sudoku_dict[s].replace(v,'')
|
||||
if len(sudoku_dict[s])==0:
|
||||
return False
|
||||
return sudoku_dict
|
||||
|
||||
def search(sudoku_dict,peers):
|
||||
if Check(sudoku_dict,peers)==False:
|
||||
return False
|
||||
if all(len(sudoku_dict[s]) == 1 for s in sudoku_dict.keys()):
|
||||
return sudoku_dict
|
||||
n,s = min((len(sudoku_dict[s]), s) for s in sudoku_dict.keys() if len(sudoku_dict[s]) > 1)
|
||||
res = []
|
||||
for value in sudoku_dict[s]:
|
||||
new_sudoku_dict = sudoku_dict.copy()
|
||||
new_sudoku_dict[s] = value
|
||||
ans = search(new_sudoku_dict, peers)
|
||||
if ans:
|
||||
res.append(ans)
|
||||
if len(res) > 1:
|
||||
raise Exception("Error")
|
||||
elif len(res) == 1:
|
||||
return res[0]
|
||||
Loading…
Reference in New Issue
Block a user