コード例 #1
0
ファイル: sudoku.py プロジェクト: NilsBarlaug/TDT4136
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
コード例 #2
0
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])
コード例 #3
0
ファイル: map_coloring.py プロジェクト: NilsBarlaug/TDT4136
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
コード例 #4
0
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