def sudokuSetup(): # Setup the initial domain for a standard sudoku game sudokuDomain = [1,2,3,4,5,6,7,8,9] startDomain = 1 endDomain = 9 # Lists to store all of our variables and constraints in variables = [] constraints = [] # Create all of the variables (from 1 to 81) for i in range(1, 81+1): variables.append(variable(i, copy.deepcopy(sudokuDomain))) constraintValue = combinationsNotEqual(startDomain, endDomain) # Add in constraints for each variable # Row constraints for j in range(startDomain-1, endDomain): for k in range(startDomain, endDomain+1): for m in range(startDomain, endDomain+1): if not alreadyInConstraints(constraints, k+(j*9), m+(j*9), "!=", constraintValue) and k != m: constraints.append(binaryConstraint(k+(j*9), m+(j*9), "!=", constraintValue)) # Column constraints for j in range(startDomain, endDomain+1): for k in range(startDomain-1, endDomain): for m in range(startDomain-1, endDomain): if not alreadyInConstraints(constraints, j+(k*9), j+(m*9), "!=", constraintValue) and k != m: constraints.append(binaryConstraint(j+(k*9), j+(m*9), "!=", constraintValue)) # Grid constraints for h in range(0,9,3): for p in range(0, 9, 3): for i in range(3): for j in range(1, 4): for k in range(3): for m in range(1, 4): if not alreadyInConstraints(constraints, (h*9)+p+(i*9)+j,(h*9)+p+(k*9)+m, "!=", constraintValue) and (h*9)+p+(i*9)+j != (h*9)+p+(k*9)+m: constraints.append(binaryConstraint((h*9)+p+(i*9)+j,(h*9)+p+(k*9)+m, "!=", constraintValue)) return variables, constraints
def alreadyInConstraints(constraints, left, right, op, constraintValue): check = binaryConstraint(left, right, op, constraintValue) if check in constraints: result = True else: result = False del check return result