class Operation(object): def __init__(self, start_word, word_list): self.init_aplhabet() self.child_node_list = [] self.start_word = start_word self.word_list = word_list self.old_tree = Bintree() self.queue = LinkedQ() self.d = {} self.start_node = Node(self.start_word) self.queue.put(self.start_node) self.start_word_bucket_list = self.make_buckets(self.start_word) self.dict_handler() def make_buckets(self, word): bucket_list = [] for i in range(len(word)): bucket = word[:i] + '_' + word[i+1:] bucket_list.append(bucket) return bucket_list def init_aplhabet(self): self.alphabet = [] for x in range(ord("a"),ord("z")+1): self.alphabet.append(chr(x)) for x in ("å","ä","ö"): self.alphabet.append(x) def dict_handler(self): for line in self.word_list: word = line for i in range(len(word)): bucket = word[:i] + '_' + word[i+1:] if not(bucket in self.d): self.d[bucket] = [] # create list with bucket as key self.d[bucket].append(word) else: self.d[bucket].append(word) def make_children(self, parent_node): word = parent_node.value bucket_list = self.make_buckets(word) for bucket in bucket_list: word_list = self.d[bucket] for new_word in word_list: child_node = Node(new_word, parent=parent_node) if self.queue.isEmpty(): self.child_node_list.append(child_node) if not(self.old_tree.exists(new_word)): self.old_tree.put(new_word) self.queue.put(child_node)
class Operation(object): def __init__(self): self.init_aplhabet() self.child_node_list = [] self.start_word = "söt" self.old_tree = Bintree() self.queue = LinkedQ() self.d = {} self.start_node = Node(self.start_word) self.queue.put(self.start_node) self.start_word_bucket_list = self.make_buckets(self.start_word) self.file_reader() # Creates a list of bucketed words def make_buckets(self, word): bucket_list = [] for i in range(len(word)): bucket = word[:i] + '_' + word[i + 1:] bucket_list.append(bucket) return bucket_list # Creates alphabet attribute def init_aplhabet(self): self.alphabet = [] for x in range(ord("a"), ord("z") + 1): self.alphabet.append(chr(x)) for x in ("å", "ä", "ö"): self.alphabet.append(x) # Reads file and places lines in dict sorted def file_reader(self): self.word_list = [] file_name = "word3.txt" f = open(file_name, "r", encoding="utf-8") for line in f: word = line[:-1] for i in range(len(word)): bucket = word[:i] + '_' + word[i + 1:] if not (bucket in self.d): self.d[bucket] = [] # create list with bucket as key self.d[bucket].append(word) else: self.d[bucket].append(word) f.close() # Creates children of parent_node by getting the corresponding child from graph object def make_children(self, parent_node): word = parent_node.value bucket_list = self.make_buckets(word) for bucket in bucket_list: word_list = self.d[bucket] for new_word in word_list: child_node = Node(new_word, parent=parent_node) if self.queue.isEmpty(): self.child_node_list.append(child_node) if not (self.old_tree.exists(new_word)): self.old_tree.put(new_word) self.queue.put(child_node)
class Operation(object): def __init__(self, start_time): self.init_aplhabet() # Used for file with 3 letter-words –––––––––––––– self.g = buildGraph("word3.txt") self.start_word = "söt" self.end_word = "sur" # Used for file with 5 letter-words –––––––––––––– # self.start_word = "anstå" # self.end_word = "anslå" # self.g = buildGraph("word5.txt") self.old_tree = Bintree() self.queue = LinkedQ() self.start_time = start_time self.start_node = Node(self.start_word) self.queue.put(self.start_node) # Creates alphabet attribute def init_aplhabet(self): self.alphabet = [] for x in range(ord("a"), ord("z") + 1): self.alphabet.append(chr(x)) for x in ("å", "ä", "ö"): self.alphabet.append(x) # Creates children of parent_node by getting the corresponding child from graph object def make_children(self, parent_node): word = parent_node.word parent_vertex = self.g.getVertex( word) # Gets the vertex corresponding with the word if parent_vertex == None: print("Error there is no way to " + self.end_word) pass else: connected_vertices = parent_vertex.getConnections( ) # Gets the connected vertecies for vertex in connected_vertices: vertex_name = vertex.getId() # Gets the word new_word = vertex_name child_node = Node(new_word, parent=parent_node) if new_word == self.end_word: self.queue.put(child_node) write_chain(child_node, self.start_time, self) if not (self.old_tree.exists(new_word)): self.old_tree.put(new_word) self.queue.put(child_node) if new_word != self.end_word and self.queue.isEmpty(): print("Error there is no way to " + self.end_word) raise SystemExit