31 lines
1006 B
Python
Executable File
31 lines
1006 B
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import sys
|
|
import itertools
|
|
|
|
wordsfile = sys.argv[1]
|
|
puzzlefile = sys.argv[2]
|
|
with open(wordsfile) as f:
|
|
validwords = set([x.strip() for x in f.readlines()])
|
|
#print(validwords)
|
|
with open(puzzlefile) as f:
|
|
rawpuzzle = [x.strip() for x in f.readlines() if ("#" not in x) and ("[eof]" not in x)]
|
|
puzzles = [[list(c) for c in x.split("|")[0].split(",")] for x in rawpuzzle]
|
|
knownwords = [[c for c in x.split("|")[1].split(",")] for x in rawpuzzle]
|
|
for i in range(len(puzzles)):
|
|
p = puzzles[i]
|
|
missing = []
|
|
allcombos = set(["".join(x) for x in list(itertools.product(*itertools.zip_longest(*p)))])
|
|
#print(allcombos)
|
|
for v in validwords:
|
|
if (v in allcombos) and (v not in knownwords[i]):
|
|
knownwords[i].append(v)
|
|
missing.append(v)
|
|
if missing:
|
|
pieces = rawpuzzle[i].split("|")
|
|
pieces[1] = pieces[1] + "," + ",".join(missing)
|
|
print("|".join(pieces))
|
|
else:
|
|
print(rawpuzzle[i])
|
|
print("[eof]")
|