1
1
"""
2
-
3
2
Given a partially filled 9×9 2D array, the objective is to fill a 9×9
4
3
square grid with digits numbered 1 to 9, so that every row, column, and
5
4
and each of the nine 3×3 sub-grids contains all of the digits.
9
8
function on the next column to see if it returns True. if yes, we
10
9
have solved the puzzle. else, we backtrack and place another number
11
10
in that cell and repeat this process.
12
-
13
11
"""
14
-
15
12
# assigning initial values to the grid
16
13
initial_grid = [
17
14
[3 , 0 , 6 , 5 , 0 , 8 , 4 , 0 , 0 ],
24
21
[0 , 0 , 0 , 0 , 0 , 0 , 0 , 7 , 4 ],
25
22
[0 , 0 , 5 , 2 , 0 , 6 , 3 , 0 , 0 ],
26
23
]
24
+
27
25
# a grid with no solution
28
26
no_solution = [
29
27
[5 , 0 , 6 , 5 , 0 , 8 , 4 , 0 , 3 ],
@@ -44,9 +42,7 @@ def is_safe(grid, row, column, n):
44
42
column, and the 3x3 subgrids contain the digit 'n'.
45
43
It returns False if it is not 'safe' (a duplicate digit
46
44
is found) else returns True if it is 'safe'
47
-
48
45
"""
49
-
50
46
for i in range (9 ):
51
47
if grid [row ][i ] == n or grid [i ][column ] == n :
52
48
return False
@@ -62,26 +58,29 @@ def is_safe(grid, row, column, n):
62
58
def is_completed (grid ):
63
59
"""
64
60
This function checks if the puzzle is completed or not.
65
- it is completed when all the cells are assigned with a number(not zero)
66
- and There is no repeating number in any column, row or 3x3 subgrid.
67
-
61
+ it is completed when all the cells are assigned with a non-zero number.
62
+
63
+ >>> is_completed([[0]])
64
+ False
65
+ >>> is_completed([[1]])
66
+ True
67
+ >>> is_completed([[1, 2], [0, 4]])
68
+ False
69
+ >>> is_completed([[1, 2], [3, 4]])
70
+ True
71
+ >>> is_completed(initial_grid)
72
+ False
73
+ >>> is_completed(no_solution)
74
+ False
68
75
"""
69
-
70
- for row in grid :
71
- for cell in row :
72
- if cell == 0 :
73
- return False
74
-
75
- return True
76
+ return all (all (cell != 0 for cell in row ) for row in grid )
76
77
77
78
78
79
def find_empty_location (grid ):
79
80
"""
80
81
This function finds an empty location so that we can assign a number
81
82
for that particular row and column.
82
-
83
83
"""
84
-
85
84
for i in range (9 ):
86
85
for j in range (9 ):
87
86
if grid [i ][j ] == 0 :
@@ -129,17 +128,14 @@ def print_solution(grid):
129
128
"""
130
129
A function to print the solution in the form
131
130
of a 9x9 grid
132
-
133
131
"""
134
-
135
132
for row in grid :
136
133
for cell in row :
137
134
print (cell , end = " " )
138
135
print ()
139
136
140
137
141
138
if __name__ == "__main__" :
142
-
143
139
# make a copy of grid so that you can compare with the unmodified grid
144
140
for grid in (initial_grid , no_solution ):
145
141
grid = list (map (list , grid ))
0 commit comments