12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #!/usr/bin/env python3
- from sudoku import Game
- from copy import deepcopy
- MAX_V = 9
- class State:
- def __init__(self):
- resultboard = []
- for x in range(MAX_V):
- temprow = []
- for y in range(MAX_V):
- temprow.append(0)
- resultboard.append(temprow)
- self.resultboard = resultboard
- choicesboard = []
- numbers = set()
- for value in range(1,10):
- numbers.add(value)
- for x in range(MAX_V):
- row = []
- for y in range(MAX_V):
- choices = deepcopy(numbers)
- row.append(choices)
- newrow=deepcopy(row)
- choicesboard.append(newrow)
- self.choicesboard = choicesboard
- def actions(state):
- actions = []
- for row in range(MAX_V):
- for col in range(MAX_V):
- #Value not yet assigned
- if state.resultboard[col][row] == 0:
- #Add possible move
- for num in state.choicesboard[col][row]:
- move = {'col': col, 'row': row, 'num': num}
- actions.append(move)
- return actions
- def result(state,move):
- newState = deepcopy(state)
- newState.resultboard[move['col']][move['row']] = move['num']
- return newState
- def goalTest(state):
- incomplete = False
- for row in range(MAX_V):
- for col in range(MAX_V):
- if state.resultboard[col][row] == 0:
- imcomplete = True
- return incomplete
- def eliminateIllValues(state):
- newState = deepcopy(state)
- for row in range(MAX_V):
- for col in range(MAX_V):
- if newState.resultboard[col][row] != 0:
- num = newState.resultboard[col][row]
- # Eliminate duplicates numbers in a row
- for x in range(MAX_V):
- newState.choicesboard[x][row].remove(num)
- # Eliminate duplicates numbers in a column
- for y in range(MAX_V):
- newState.choicesboard[col][y].remove(num)
- # Eliminate duplicates in block (working only for 9x9 cells)
- #for y in range(MAX_V)
- # choicesboard[col][y].del(state.resultboard[col][row])
- return newState
- if __name__ == "__main__":
- node = State()
- while not goalTest(node):
- move = actions(node).pop()
- node = result(node,move)
- node = eliminateIllValues(node)
- print('Result found!')
|