Fix cell status

master
En Yi 2018-07-12 18:48:45 +08:00
parent 48f81470b8
commit 9ca2b1a5f6
3 changed files with 13 additions and 12 deletions

View File

@ -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)

View File

@ -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]

View File

@ -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