-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAlgorithm.py
More file actions
83 lines (64 loc) · 1.71 KB
/
Copy pathAlgorithm.py
File metadata and controls
83 lines (64 loc) · 1.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import vars as v
from copy import deepcopy
sdk = [[]]
def checkRow(n, _x, y):
for x in range(9):
if n == sdk[y][x] and x != _x:
return False
return True
def checkCol(n, x, _y):
for y in range(9):
if n == sdk[y][x] and y != _y:
return False
return True
def checkSq(n, x, y):
minX = int(x / 3) * 3
minY = int(y / 3) * 3
maxX = (int(x / 3) + 1) * 3
maxY = (int(y / 3) + 1) * 3
for y in range(minY, maxY):
for x in range(minX, maxX):
if n == sdk[y][x]:
return False
return True
def check(n, x, y):
if checkRow(n, x, y) and checkCol(n, x, y) and checkSq(n, x, y):
return True
return False
def getEMN(x, y): # getEveryMatchingNumber
nms = []
for n in range(1, 10):
if check(n, x, y):
nms.append(n)
return nms
def checkEN():
nums = [[[0] for j in range(9)] for i in range(9)]
for y in range(9):
for x in range(9):
if sdk[y][x] == 0:
nums[y][x] = getEMN(x, y)
return nums
def setNums():
nums = checkEN()
for y in range(9):
for x in range(9):
if len(nums[y][x]) == 1 and nums[y][x][0] != 0:
n = nums[y][x][0]
sdk[y][x] = n
def solveSudoku(OSdk):
global sdk
sdk = deepcopy(OSdk)
solved = False
while not solved:
setNums()
br = False
for y in range(9):
for x in range(9):
solved = True
if sdk[y][x] == 0: # and v.OSdk[y][x] != sdk[y][x]:
solved = False
br = True
break
if br:
break
return sdk