Coding_for_Crosswords_in_Py.../a.py

120 lines
2.8 KiB
Python

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