def create_sudoku_csp(filename): """Instantiate a CSP representing the Sudoku board found in the text file named 'filename' in the current directory. """ csp = CSP() board = list(map(lambda x: x.strip(), open(filename, 'r'))) for row in range(9): for col in range(9): if board[row][col] == '0': csp.add_variable('%d-%d' % (row, col), map(str, range(1, 10))) else: csp.add_variable('%d-%d' % (row, col), [board[row][col]]) for row in range(9): csp.add_all_different_constraint( ['%d-%d' % (row, col) for col in range(9)]) for col in range(9): csp.add_all_different_constraint( ['%d-%d' % (row, col) for row in range(9)]) for box_row in range(3): for box_col in range(3): cells = [] for row in range(box_row * 3, (box_row + 1) * 3): for col in range(box_col * 3, (box_col + 1) * 3): cells.append('%d-%d' % (row, col)) csp.add_all_different_constraint(cells) return csp
def initialize_sudoku(): csp = CSP() N = 4 BLOCK = 2 rule = "x != y" for i in range(N): for j in range(N): csp.add_variable("(%s, %s)" % (i, j), list(range(N))) for x1 in range(N): for y1 in range(N): for x2 in range(N): for y2 in range(N): neighbors = False if x1 == x2: neighbors = True if y1 == y2: neighbors = True if x1 // BLOCK == x2 // BLOCK and y1 // BLOCK == y2 // BLOCK: neighbors = True if neighbors: csp.add_constraint("(%s, %s)" % (x1, y1), "(%s, %s)" % (x2, y2), rule) csp.export_to_json("sudoku.json") csp.all_solutions = False solution = csp.solve() board = [[0] * N for i in range(N)] print(len(board)) for key, value in solution.items(): print(key[1], key[4], value) board[int(key[1])][int(key[4])] = value[0] for i in range(N): print(board[i])
def create_map_coloring_csp(): """Instantiate a CSP representing the map coloring problem from the textbook. This can be useful for testing your CSP solver as you develop your code. """ csp = CSP() states = ['WA', 'NT', 'Q', 'NSW', 'V', 'SA', 'T'] edges = {'SA': ['WA', 'NT', 'Q', 'NSW', 'V'], 'NT': ['WA', 'Q'], 'NSW': ['Q', 'V']} colors = ['red', 'green', 'blue'] for state in states: csp.add_variable(state, colors) for state, other_states in edges.items(): for other_state in other_states: csp.add_constraint_one_way(state, other_state, lambda i, j: i != j) csp.add_constraint_one_way(other_state, state, lambda i, j: i != j) return csp
def initialzing_NQueen(N): csp = CSP() rule = "x[0] != y[0] and x[1] != y[1] and abs((x[0] - y[0]) / (x[1] - y[1])) != 1" for v in range(N): csp.add_variable(str(v), [[x, y] for x in range(N) for y in range(N)]) for x in csp.variables: for y in csp.variables: if x != y: csp.add_constraint(x, y, rule) csp.solve() csp.save_solution() # print(csp.solutions) return csp