def ToUpper(s): return s.upper() class Words: def __init__(self): self.word = [] num_buckets = 1001 def bucket(s): assert(len(s) != 0) i = 0 for c in s: i = (i * 217) + ord(c) i = abs(i) b = i % num_buckets assert(b >= 0 and b < num_buckets) return b class Library: def __init__(self): # master vector of word self.words = Words() self.counts = {} self.shelves = {} for i in range(num_buckets): self.shelves[i] = [] def IsWord(self, s): for Words.word in self.shelves[bucket(s)]: if s == Words.word: return True return False def ComputeStats(self): # assert self.counts == {} for i in range(18): self.counts[i] = [] for s in self.words: _len = len(s) if _len <= 18: self.counts[_len-1].append(_len) def PrintStats(self): print("Here are the counts of each word length") for k,v in self.counts.items(): # print(v) if k != 0: print(f"[{k}] {len(v)}") def GetWord(self, i): assert (i >= 0 and i < len(self.words)) return self.words[i] def ReadFromFile(self, filename): with open(filename, 'r') as f: for line in f: line = ToUpper(line.rstrip()) self.words.word.append(line) self.shelves[bucket(line)].append(line) print(f"Read {len(self.words.word)} words from file '{filename}'") def DebugBuckets(self): for i in range(len(self.shelves)): print(f"[{i}] {len(self.shelves[i])}") class Grid: def __init__(self, n): self.name = n self.lines = [] def rows(self): return len(self.lines) def cols(self): if self.lines == []: return 0 else: return len(self.lines[0]) def LoadFromFile(self, filename): with open(filename, 'r') as f: for line in f: #print(f"{line.rstrip()} ({len(line.rstrip())})") if not line.startswith('#'): self.lines.append(list(line.rstrip())) def Check(self): for s in self.lines: assert len(s) == self.cols() def Print(self): print(f"Grid: {self.name} " f"(rows={self.rows()}," f" cols={self.cols()})") for s in self.lines: print(f" {''.join(s)}") if __name__ == "__main__": lib = Library() lib.ReadFromFile("top_12000.txt") # lib.ComputeStats() # lib.PrintStats() print(lib.IsWord("DOG")) print(lib.IsWord("CAT")) print(lib.IsWord("THANKS")) lib.DebugBuckets() # grid = Grid("MY GRID") # grid.LoadFromFile("test") # grid.Check() # grid.Print()