Fix cell status
parent
48f81470b8
commit
9ca2b1a5f6
|
@ -1,8 +1,6 @@
|
||||||
"""
|
"""
|
||||||
Module that generates a valid Sudoku Puzzle
|
Module that generates a valid Sudoku Puzzle
|
||||||
Credits for Solver : http://norvig.com/sudoku.html
|
|
||||||
Credits for Generator: http://zhangroup.aporc.org/images/files/Paper_3485.pdf
|
Credits for Generator: http://zhangroup.aporc.org/images/files/Paper_3485.pdf
|
||||||
|
|
||||||
"""
|
"""
|
||||||
import random
|
import random
|
||||||
import re
|
import re
|
||||||
|
@ -13,11 +11,11 @@ if __name__ == "__main__":
|
||||||
else:
|
else:
|
||||||
from . import Sudoku_Solver as solver
|
from . import Sudoku_Solver as solver
|
||||||
|
|
||||||
givenregex = re.compile('(?!0)')
|
given_regex = re.compile('(?!0)')
|
||||||
|
|
||||||
|
|
||||||
def check_for_givens(seq):
|
def check_for_givens(seq):
|
||||||
return len([m.start() for m in givenregex.finditer(seq)])-1
|
return len([m.start() for m in given_regex.finditer(seq)])-1
|
||||||
|
|
||||||
|
|
||||||
def generate_completed_grid(n):
|
def generate_completed_grid(n):
|
||||||
|
@ -26,7 +24,6 @@ def generate_completed_grid(n):
|
||||||
values = solver.parse_grid('0' * 81)
|
values = solver.parse_grid('0' * 81)
|
||||||
valid_assignments = 0
|
valid_assignments = 0
|
||||||
while valid_assignments < n:
|
while valid_assignments < n:
|
||||||
# display(values)
|
|
||||||
cell_to_assign = solver.squares[random.randint(0, 80)]
|
cell_to_assign = solver.squares[random.randint(0, 80)]
|
||||||
valid_values = values[cell_to_assign]
|
valid_values = values[cell_to_assign]
|
||||||
if len(valid_values):
|
if len(valid_values):
|
||||||
|
@ -43,7 +40,6 @@ def generate_completed_grid(n):
|
||||||
|
|
||||||
|
|
||||||
def generate_dig_sequence(difficulty):
|
def generate_dig_sequence(difficulty):
|
||||||
# TODO: Determine the number of givens and lower bound of given
|
|
||||||
if difficulty <= 1:
|
if difficulty <= 1:
|
||||||
random_number = list(range(81))
|
random_number = list(range(81))
|
||||||
while len(random_number) > 0:
|
while len(random_number) > 0:
|
||||||
|
@ -187,6 +183,7 @@ def generate_sudoku_grid(difficulty):
|
||||||
|
|
||||||
return grid
|
return grid
|
||||||
|
|
||||||
|
|
||||||
def generate_sudoku_puzzle(difficulty):
|
def generate_sudoku_puzzle(difficulty):
|
||||||
grid = generate_sudoku_grid(difficulty)
|
grid = generate_sudoku_grid(difficulty)
|
||||||
print('Givens: ', check_for_givens(grid))
|
print('Givens: ', check_for_givens(grid))
|
||||||
|
@ -195,6 +192,7 @@ def generate_sudoku_puzzle(difficulty):
|
||||||
|
|
||||||
return sudoku_array
|
return sudoku_array
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
a = generate_sudoku_puzzle(3)
|
a = generate_sudoku_puzzle(3)
|
||||||
print(a)
|
print(a)
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
# TODO: Rewrite this to use array instead?
|
||||||
|
"""
|
||||||
|
Module to solve any Sudoku Board
|
||||||
|
Credits for Solver : http://norvig.com/sudoku.html
|
||||||
|
"""
|
||||||
def cross(array1, array2):
|
def cross(array1, array2):
|
||||||
"""Cross product of elements in A and elements in B."""
|
"""Cross product of elements in A and elements in B."""
|
||||||
return [a+b for a in array1 for b in array2]
|
return [a+b for a in array1 for b in array2]
|
||||||
|
|
|
@ -30,7 +30,7 @@ class SudokuSystem:
|
||||||
|
|
||||||
def clear_grid(self):
|
def clear_grid(self):
|
||||||
self.number_grid[:] = 0
|
self.number_grid[:] = 0
|
||||||
self.cell_status = EMPTY
|
self.cell_status[:] = FIXED
|
||||||
for i in range(9):
|
for i in range(9):
|
||||||
for j in range(9):
|
for j in range(9):
|
||||||
while self.offending_cells[i][j]:
|
while self.offending_cells[i][j]:
|
||||||
|
@ -121,11 +121,9 @@ class SudokuSystem:
|
||||||
self.cell_status[r, c] = EMPTY
|
self.cell_status[r, c] = EMPTY
|
||||||
|
|
||||||
def generate_random_board(self):
|
def generate_random_board(self):
|
||||||
# TODO: Write function to generate a random board
|
|
||||||
self.clear_grid()
|
self.clear_grid()
|
||||||
self.number_grid[:] = sdk_gen.generate_sudoku_puzzle(2)
|
self.number_grid[:] = sdk_gen.generate_sudoku_puzzle(2)
|
||||||
self.cell_status = self.number_grid > 0 * FIXED
|
row, col = np.where(self.number_grid == 0)
|
||||||
|
|
||||||
def check_valid_moves(self):
|
for r, c in zip(row, col):
|
||||||
# TODO: Write function to return a possible valid numbers for a cell
|
self.cell_status[r, c] = EMPTY
|
||||||
pass
|
|
||||||
|
|
Loading…
Reference in New Issue