File tree Expand file tree Collapse file tree 4 files changed +54
-5
lines changed Expand file tree Collapse file tree 4 files changed +54
-5
lines changed Original file line number Diff line number Diff line change
1
+ a,b,c,d,e,f,g,h,i
2
+ 0,0,0,7,0,8,0,0,0
3
+ 0,0,7,0,4,0,0,5,0
4
+ 0,3,0,0,0,2,8,0,0
5
+ 3,0,4,0,8,0,0,0,2
6
+ 5,7,0,2,0,0,0,0,3
7
+ 0,2,0,0,7,3,0,6,5
8
+ 0,0,0,6,5,0,0,2,0
9
+ 8,0,0,0,3,0,6,0,9
10
+ 0,0,0,8,0,0,0,7,4
Original file line number Diff line number Diff line change
1
+ from read_sudoku import import_sudoku
2
+ from sudoku_solver import solve_sudoku
3
+
4
+ def main () -> None :
5
+
6
+ sudoku_to_be_solved = import_sudoku ()
7
+ sudoku_solved = solve_sudoku (sudoku_to_be_solved )
8
+ print ("The solution to the sudoku proposed is:\n " , sudoku_solved .grid )
9
+
10
+ if __name__ == '__main__' :
11
+ main ()
Original file line number Diff line number Diff line change @@ -20,7 +20,7 @@ def is_solvable(sudoku: Sudoku) -> bool:
20
20
21
21
# Check there are at least 17 non 0 numbers for unique solution
22
22
23
- if sudoku [sudoku .grid != 0 ].size < MINIMUM_NUMBERS_FOR_UNIQUE_SOLUTION :
23
+ if sudoku . grid [sudoku .grid != 0 ].size < MINIMUM_NUMBERS_FOR_UNIQUE_SOLUTION :
24
24
return False
25
25
26
26
# Check rows' legality
@@ -30,14 +30,14 @@ def is_solvable(sudoku: Sudoku) -> bool:
30
30
return False
31
31
32
32
# Check columns' legality
33
- for column in np .nditer (sudoku , flags = ['external_loop' ], order = 'C' ):
33
+ for column in np .nditer (sudoku . grid , flags = ['external_loop' ], order = 'C' ):
34
34
column = column [column != 0 ]
35
35
if np .unique (column ).size != column .size :
36
36
return False
37
37
38
38
# Check regions' legality
39
39
for region_number in range (NUMBER_REGIONS ):
40
- region = getattr (sudoku , 'region' + ( region_number + 1 ))
40
+ region = getattr (sudoku , "{}{}" . format ( 'region' , region_number + 1 ))
41
41
region = region [region != 0 ]
42
42
if np .unique (region ).size != region .size :
43
43
return False
Original file line number Diff line number Diff line change
1
+ import numpy as np
2
+ import random
3
+ from move import Move
1
4
from sudoku import Sudoku
2
5
3
- LEGIT_NUMBERS = list (range (1 ,10 ))
6
+ LEGIT_DIGITS = list (range (1 ,10 ))
4
7
5
8
def solve_sudoku (sudoku : Sudoku ) -> Sudoku :
6
9
7
- return sudoku
10
+ '''
11
+ Solve a given legal sudoku by appliying a
12
+ backtracking strategy.
13
+ '''
14
+
15
+ if np .count_nonzero (sudoku .grid ) == 0 :
16
+ return sudoku
17
+
18
+ # Test a move for the first nakedcell encountered
19
+ naked_cells_indexes = np .where (sudoku .grid == 0 )
20
+ first_naked_cell = (naked_cells_indexes [0 ][0 ], naked_cells_indexes [1 ][0 ])
21
+ #digits_in_row = sudoku.grid[first_naked_cell[0], :]
22
+ #digits_in_column = sudoku.grid[:, first_naked_cell[1]]
23
+ #digits_in_region = sudoku.get_region_from_move(Move(0, first_naked_cell[0], first_naked_cell[1]))
24
+
25
+ move = Move (0 , first_naked_cell [0 ], first_naked_cell [1 ])
26
+
27
+ for digit in LEGIT_DIGITS :
28
+ move .number = digit
29
+ sudoku .put_number (move )
30
+ if sudoku .check_legal_state (move ):
31
+ print ("Legal move" )
32
+ print (sudoku .grid )
33
+ solve_sudoku (sudoku )
34
+ move .number = 0
35
+ sudoku .put_number (move )
You can’t perform that action at this time.
0 commit comments