#!/usr/bin/env python3 from sudoku import Game 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 = [] # Populate the numbers vector with values from 1 to MAX_V # choicesboard is a bidimensional list with numbers for every element for x in range(MAX_V): row = [] for y in range(MAX_V): numbers = set() for value in range(1,10): numbers.add(value) row.append(numbers) choicesboard.append(row) 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): state.resultboard[move['col']][move['row']] = move['num'] 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): for row in range(MAX_V): for col in range(MAX_V): if state.resultboard[col][row] != 0: num = state.resultboard[col][row] # Eliminate duplicates numbers in a row for x in range(MAX_V): state.choicesboard[x][row].remove(num) # Eliminate duplicates numbers in a column for y in range(MAX_V): state.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]) if __name__ == "__main__": node = State() while not goalTest(node): move=actions(node).pop() result(node,move) eliminateIllValues(node) print('Result found!')