def add(self, edge): if edge[1] not in self.edges[edge[0]]: self.edges[edge[0]].append(edge[1]) bSort(self.edges[edge[0]], len(self.edges[edge[0]])) if edge[0] not in self.edges[edge[1]]: self.edges[edge[1]].append(edge[0]) bSort(self.edges[edge[1]], len(self.edges[edge[1]]))
def swapVertices(self, v1, v2): temp = self.edges[v1] self.edges[v1] = self.edges[v2] self.edges[v2] = temp for i in range(len(self.edges)): for j in range(len(self.edges[i])): if self.edges[i][j] == v1: self.edges[i][j] = v2 elif self.edges[i][j] == v2: self.edges[i][j] = v1 bSort(self.edges[i], len(self.edges[i]))
def ioibHelp(arr1, arr2, size): #helper function for indistObjIndistBox arrTest = deepcopy(arr1) bSort(arrTest, size) arr2Test = deepcopy(arr2) for i in arr2Test: for k in range(size): if arrTest[k] != i[k]: break if arrTest[k] == i[k] and k == size - 1: return True return False
def statePermutations(length, out = "", perms = [], exit = 0): #this exists so I could pass in the number of states and it would create a string to make permutations with if type(length) is int: exit = pow(2, length) temp = "" for x in range(length): temp += str(x) length = temp #no more permutations to make in this recursion if length == "": return #creates permutations with current 'out' as a base string, only adds new combinations to perms for x in range(len(length)): out += length[x] temp = [int(char) for char in out] if bSort(temp, len(temp)) not in perms: perms.append(temp) out = out[:len(out) - 1] if len(perms) == exit: return perms #creates new base string and attempts more permutations for x in range(len(length)): out += length[x] statePermutations(length[:x] + length[x+1:], out, perms,exit) out = out[:len(out) - 1] return perms
def indistObjIndistBox(n_Obj, r_Box, howmanyhavetobeineachbox=0): if n_Obj < 0: return n_Obj -= r_Box * howmanyhavetobeineachbox sol = [] currTest = [] for i in range(r_Box - 1): currTest.append(0) currTest.append(n_Obj) arr = deepcopy(currTest) sol.append(arr) while currTest[0] != n_Obj - 1: incrPerm(currTest, r_Box, n_Obj) if (not ioibHelp(currTest, sol, r_Box)): summ = 0 for i in currTest: summ += i if summ == n_Obj: arr = deepcopy(currTest) bSort(arr, r_Box) sol.append(arr) return (sol, len(sol))
def _toDFAHelp(self,state,Q=None,D=None): if Q == None and D == None: Q = [] D = [] stateIndex = len(Q) #attempt to add new state to statelist, or gtfo if it already there if type(state) is int: ep = self.epsClosure(state) if ep not in Q: Q.append(bSort(ep, len(ep))) else: return [Q,D] elif type(state) is list: if state not in Q: Q.append(bSort(state, len(state))) else: return [Q,D] D.append([]) #for every letter (except epsilon), use fancy schmancy epsclosure to find transition, #then add it in the proper spot in D for letter in range(len(self.sigma) - 1): D[stateIndex].append([]) for tempstate in Q[stateIndex]: tempEps = self.epsClosure(tempstate) for st in tempEps: de = self.DELTA(self.sigma[letter],st) if type(de) is int and de not in D[stateIndex][letter]: D[stateIndex][letter].append(de) elif type(de) is list: for x in de: if x not in D[stateIndex][letter]: D[stateIndex][letter].append(x) bSort(D[stateIndex][letter], len(D[stateIndex][letter])) #attempt to recurse to add possible new states if D[stateIndex][letter] not in Q: [Q,D] = self._toDFAHelp(D[stateIndex][letter], Q, D) return [Q,D]