103 lines
2.5 KiB
Python
103 lines
2.5 KiB
Python
def ToUpper(s):
|
|
return s.upper()
|
|
|
|
|
|
class Words:
|
|
|
|
def __init__(self):
|
|
self.word = []
|
|
|
|
class Library:
|
|
|
|
def __init__(self):
|
|
# master vector of word
|
|
self.words_ = Words()
|
|
self.counts_ = {}
|
|
# hash table
|
|
self.word_map_ = {}
|
|
|
|
def IsWord(self, s):
|
|
return s in self.word_map_
|
|
|
|
def ComputeStats(self):
|
|
# assert self.counts == {}
|
|
for i in range(18):
|
|
self.counts_[i] = []
|
|
for s in self.words_:
|
|
_len = len(s.word)
|
|
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.word_map_[line] = line
|
|
print(f"Read {len(self.words_.word)} words from file '{filename}'")
|
|
|
|
def DebugBuckets(self):
|
|
for i, (k,v) in enumerate(self.word_map_.items()):
|
|
print(f"[{i}] {len(v)}")# {self.word_map_[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"))
|
|
print(lib.IsWord("TFAFAS"))
|
|
lib.DebugBuckets()
|
|
|
|
# grid = Grid("MY GRID")
|
|
# grid.LoadFromFile("test")
|
|
# grid.Check()
|
|
# grid.Print() |