Skip to content

Commit d4e4b6d

Browse files
authored
Merge branch 'master' into doctest
2 parents f5eac77 + 26b0803 commit d4e4b6d

File tree

1 file changed

+16
-20
lines changed

1 file changed

+16
-20
lines changed

backtracking/sudoku.py

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
"""
2-
32
Given a partially filled 9×9 2D array, the objective is to fill a 9×9
43
square grid with digits numbered 1 to 9, so that every row, column, and
54
and each of the nine 3×3 sub-grids contains all of the digits.
@@ -9,9 +8,7 @@
98
function on the next column to see if it returns True. if yes, we
109
have solved the puzzle. else, we backtrack and place another number
1110
in that cell and repeat this process.
12-
1311
"""
14-
1512
# assigning initial values to the grid
1613
initial_grid = [
1714
[3, 0, 6, 5, 0, 8, 4, 0, 0],
@@ -24,6 +21,7 @@
2421
[0, 0, 0, 0, 0, 0, 0, 7, 4],
2522
[0, 0, 5, 2, 0, 6, 3, 0, 0],
2623
]
24+
2725
# a grid with no solution
2826
no_solution = [
2927
[5, 0, 6, 5, 0, 8, 4, 0, 3],
@@ -44,9 +42,7 @@ def is_safe(grid, row, column, n):
4442
column, and the 3x3 subgrids contain the digit 'n'.
4543
It returns False if it is not 'safe' (a duplicate digit
4644
is found) else returns True if it is 'safe'
47-
4845
"""
49-
5046
for i in range(9):
5147
if grid[row][i] == n or grid[i][column] == n:
5248
return False
@@ -62,26 +58,29 @@ def is_safe(grid, row, column, n):
6258
def is_completed(grid):
6359
"""
6460
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
6875
"""
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)
7677

7778

7879
def find_empty_location(grid):
7980
"""
8081
This function finds an empty location so that we can assign a number
8182
for that particular row and column.
82-
8383
"""
84-
8584
for i in range(9):
8685
for j in range(9):
8786
if grid[i][j] == 0:
@@ -129,17 +128,14 @@ def print_solution(grid):
129128
"""
130129
A function to print the solution in the form
131130
of a 9x9 grid
132-
133131
"""
134-
135132
for row in grid:
136133
for cell in row:
137134
print(cell, end=" ")
138135
print()
139136

140137

141138
if __name__ == "__main__":
142-
143139
# make a copy of grid so that you can compare with the unmodified grid
144140
for grid in (initial_grid, no_solution):
145141
grid = list(map(list, grid))

0 commit comments

Comments
 (0)