コード例 #1
0
def getConstrains(stateOriginal):
    unassigned = rule.getUnassigned(stateOriginal)
    result = {(i, j): 0 for (i, j) in unassigned}
    for (i, j) in rule.getUnassigned(stateOriginal):

        # sameRowCol is num of strains caused by 2 coordinates being in the same row or col
        sameRowCol = mc.numlitCells(stateOriginal, (i, j))
        neighborsToNumber = getNumAffected((i, j), stateOriginal)
        result[(i, j)] = sameRowCol + neighborsToNumber
    return {
        k: v
        for k, v in sorted(
            result.items(), key=lambda item: item[1], reverse=True)
    }
コード例 #2
0
def getAffected(state):
    result = {(i, j): [] for (i, j) in rule.getNumbers(state)}
    unassigned = rule.getUnassigned(state)
    row, col = len(state), len(state[0])
    for (i, j) in rule.getNumbers(state):
        if i + 1 <= row - 1 and (i + 1, j) in unassigned:
            result[(i, j)].append((i + 1, j))
        if i - 1 >= 0 and (i - 1, j) in unassigned:
            result[(i, j)].append((i - 1, j))
        if j + 1 <= col - 1 and (i, j + 1) in unassigned:
            result[(i, j)].append((i, j + 1))
        if j - 1 >= 0 and (i, j - 1) in unassigned:
            result[(i, j)].append((i, j - 1))
    return result
コード例 #3
0
def getNumAffected(coord, stateOriginal):
    (m, n) = coord
    result = []

    unassigned = rule.getUnassigned(stateOriginal)
    row, col = len(stateOriginal), len(stateOriginal[0])
    for (i, j) in rule.getNumbers(stateOriginal):
        if isAdjacent(coord, (i, j), stateOriginal):

            if i + 1 <= row - 1 and (i + 1, j) in unassigned:
                result.append((i + 1, j))
            if i - 1 >= 0 and (i - 1, j) in unassigned:
                result.append((i - 1, j))
            if j + 1 <= col - 1 and (i, j + 1) in unassigned:
                result.append((i, j + 1))
            if j - 1 >= 0 and (i, j - 1) in unassigned:
                result.append((i, j - 1))
            result.remove(coord)

    return len(set(result))
コード例 #4
0
def mostConstrainingSearch(state):
    U = rule.getUnassigned(state)  # a list of all unassigned variables
    A = {}  # a dictionary that maps: unassigned coordinate-->None
    return mostConstrainingSearchHelper(A, U.copy(), state)
コード例 #5
0
def backtracking(state):  # state is the initial state immediately after reading from stdin
    U = rule.getUnassigned(state)  # a list of all unassigned variables
    A = {}  # a dictionary that maps: unassigned coordinate-->None
    return backtrackingHelper(A, U.copy(), state)