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) }
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
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))
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)
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)