-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.py
executable file
·73 lines (62 loc) · 1.74 KB
/
app.py
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
#! /usr/bin/env python
import numpy
board = numpy.matrix([
[5,3,0,0,7,0,0,0,0],
[6,0,0,1,9,5,0,0,0],
[0,9,8,0,0,0,0,6,0],
[8,0,0,0,6,0,0,0,3],
[4,0,0,8,0,3,0,0,1],
[7,0,0,0,2,0,0,0,6],
[0,6,0,0,0,0,2,8,0],
[0,0,0,4,1,9,0,0,5],
[0,0,0,0,8,0,0,7,9]
])
regions = [
[[0,2],[0,2]],
[[3,5],[0,2]],
[[6,8],[0,2]],
[[0,2],[3,5]],
[[3,5],[3,5]],
[[6,8],[3,5]],
[[0,2],[6,8]],
[[3,5],[6,8]],
[[6,8],[6,8]]
]
def get_region_ranges(x,y) :
for region in regions:
if x >= region[0][0] and \
x <= region[0][1] and \
y >= region[1][0] and \
y <= region[1][1] :
x_range = range(region[0][0], region[0][1] + 1)
y_range = range(region[1][0], region[1][1] + 1)
return x_range, y_range
def is_valid(x, y, v) :
#check the row
if v in board[:,x] : return False
#check the column
if v in board[y,:] : return False
(x_range, y_range) = get_region_ranges(x,y)
# look for the value in the region
for x in x_range:
for y in y_range:
if v == board[y,x] :
return False
return True
def solve() :
global board
for y in range(9) :
for x in range (9) :
if (board[y,x] == 0) :
# empty cell, let's try things
for v in range(1,10) :
if is_valid(x, y, v) :
board[y,x] = v
solve()
# backtrack
board[y,x] = 0
return
print(board)
input("More?")
if __name__ == '__main__' :
solve()