From ee0cfe4e4d6e24437ae872e50e3209bdd883763e Mon Sep 17 00:00:00 2001 From: Sosokker Date: Mon, 20 Dec 2021 11:33:32 +0700 Subject: [PATCH] Create code --- code | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 code diff --git a/code b/code new file mode 100644 index 0000000..1e2ce7c --- /dev/null +++ b/code @@ -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]