-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchecker.py
96 lines (87 loc) · 2.08 KB
/
checker.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
"""Grid Validation methods"""
import grid
from grid import *
def is_valid(grid):
if is_valid_rows(grid,True):
if is_valid_cols(grid,True):
if is_valid_blocks(grid,True):
return True
return False
def is_valid_not_full(grid):
if is_valid_rows(grid,False):
if is_valid_cols(grid,False):
if is_valid_blocks(grid,False):
return True
return False
#TODO: utilize is_full flag
def is_valid_row(grid,row,is_full):
result=True
found=set()
for col in range(grid.MAX):
if (not is_full) and (grid[row][col] == Grid.EMPTY):
continue
elif (not grid[row][col] in found):
found.add(grid[row][col])
else:
result = False
break
return result
#TODO: utilize is_full flag
def is_valid_col(grid,col,is_full):
result=True
found=set()
for row in range(grid.MAX):
if (not is_full) and (grid[row][col] == Grid.EMPTY):
continue
elif (not grid[row][col] in found):
found.add(grid[row][col])
else:
result = False
break
return result
#TODO: utilize is_full flag
def is_valid_block(grid,block,is_full):
BOUND=3
result=True
found=set()
#find upper left corner of block
row_ul=0
if block >= 6:
row_ul=6
elif block >= 3:
row_ul=3
col_ul=(block-row_ul)*3
#print str(block) + ':' + str(row) +','+ str(col)
for row in range(row_ul,row_ul+BOUND):
for col in range(col_ul,col_ul+BOUND):
#print '('+str(row)+','+str(col)+')'
if not grid[row][col] in found:
found.add(grid[row][col])
else:
result=False
return result
return result
def is_valid_rows(grid,is_full):
result=True
for row in range(grid.MAX):
result = is_valid_row(grid,row,is_full)
if not result:
break
return result
def is_valid_cols(grid,is_full):
result=True
for col in range(grid.MAX):
result = is_valid_col(grid,col,is_full)
if not result:
break
return result
#TODO: is a block check required??
def is_valid_blocks(grid,is_full):
return True
"""
for block in range(grid.MAX):
result = is_valid_block(grid,block,is_full)
if not result
break
return result
"""