Fix given checks off-by-one error

master
En Yi 2018-07-12 17:01:11 +08:00
parent 528b67a0b4
commit 48f81470b8
1 changed files with 9 additions and 9 deletions

View File

@ -13,11 +13,11 @@ if __name__ == "__main__":
else: else:
from . import Sudoku_Solver as solver from . import Sudoku_Solver as solver
filledcell = re.compile('(?!0)') givenregex = re.compile('(?!0)')
def check_for_nonzeros(seq): def check_for_givens(seq):
return len([m.start() for m in filledcell.finditer(seq)]) return len([m.start() for m in givenregex.finditer(seq)])-1
def generate_completed_grid(n): def generate_completed_grid(n):
@ -112,8 +112,8 @@ def array_to_grid(sudoku_array):
return ''.join(b) return ''.join(b)
def propagate_array(sudoku_array): def propagate_array(sudoku_array, N):
prop_seq = [random.randint(0, 2) for _ in range(random.randint(5, 15))] prop_seq = [random.randint(0, 2) for _ in range(N)]
#prop_seq = [0] #prop_seq = [0]
prev_num = -1 prev_num = -1
@ -171,8 +171,8 @@ def generate_sudoku_grid(difficulty):
break break
row = int(i / 9) * 9 row = int(i / 9) * 9
col = i % 9 col = i % 9
if check_for_nonzeros(grid[row:row+9]) > lower_bound and\ if check_for_givens(grid[row:row+9]) > lower_bound and\
check_for_nonzeros(grid[col::9]) > lower_bound: check_for_givens(grid[col::9]) > lower_bound:
current_number = grid[i] current_number = grid[i]
other_numbers = solver.digits.replace(current_number, '') other_numbers = solver.digits.replace(current_number, '')
unique = True unique = True
@ -189,9 +189,9 @@ def generate_sudoku_grid(difficulty):
def generate_sudoku_puzzle(difficulty): def generate_sudoku_puzzle(difficulty):
grid = generate_sudoku_grid(difficulty) grid = generate_sudoku_grid(difficulty)
print('Givens: ', check_for_nonzeros(grid)) print('Givens: ', check_for_givens(grid))
sudoku_array = grid_to_array(grid) sudoku_array = grid_to_array(grid)
propagate_array(sudoku_array) propagate_array(sudoku_array, 18)
return sudoku_array return sudoku_array