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:
2020
2121 # Check there are at least 17 non 0 numbers for unique solution
2222
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 :
2424 return False
2525
2626 # Check rows' legality
@@ -30,14 +30,14 @@ def is_solvable(sudoku: Sudoku) -> bool:
3030 return False
3131
3232 # 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' ):
3434 column = column [column != 0 ]
3535 if np .unique (column ).size != column .size :
3636 return False
3737
3838 # Check regions' legality
3939 for region_number in range (NUMBER_REGIONS ):
40- region = getattr (sudoku , 'region' + ( region_number + 1 ))
40+ region = getattr (sudoku , "{}{}" . format ( 'region' , region_number + 1 ))
4141 region = region [region != 0 ]
4242 if np .unique (region ).size != region .size :
4343 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
14from sudoku import Sudoku
25
3- LEGIT_NUMBERS = list (range (1 ,10 ))
6+ LEGIT_DIGITS = list (range (1 ,10 ))
47
58def solve_sudoku (sudoku : Sudoku ) -> Sudoku :
69
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