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 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
m = assignment['M'] o = assignment['O'] r = assignment['R'] y = assignment['Y'] #Checking if condition is satisfied send = s * 1000 + e * 100 + n * 10 + d more = m * 1000 + o * 100 + r * 10 + e money = m * 10000 + o * 1000 + n * 100 + e * 10 + y return send + more == money return True if __name__ == "__main__": letters = ["S", "E", "N", "D", "M", "O", "R", "Y"] possible_digits = {} for letter in letters: possible_digits[letter] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] possible_digits["M"] = [1] # so we don't get answers starting with a 0 csp = CSP(letters, possible_digits) csp.add_constraint(SendMoreMoneyConstraint(letters)) solution = csp.backtracking_search() if solution is None: print("No solution found!") else: for key, val in solution.items(): print(str(key).ljust(10), str(val).ljust(30))