def generate_cached_clues(phrases): if len(phrases) in CLUE_STRUCTURES: for indexed_clue in CLUE_STRUCTURES[len(phrases)]: yield convert_indexed_clue(indexed_clue, phrases) else: for c in generate_clues(phrases): yield c
def precompute_clues(max_length): """ Precompute all parses up to max_length """ computed_clues = dict() for i in range(1, max_length + 1): phrases = range(i) computed_clues[i] = generate_clues(phrases) with open('data/clue_structures.pck', 'w') as f: pickle.dump(computed_clues, f)
def solve_phrasing(self, phrasing): """ Solve a clue which has been broken down into phrases, like: ['initially', 'babies', 'are', 'naked'] """ answers_with_clues = [] possible_clues = list(generate_clues(phrasing)) parallel = True if parallel: for i, clue in enumerate(possible_clues): self.go_proc.stdin.write(str(clue) + "\n") self.go_proc.stdin.write(".\n") for i, x in enumerate(possible_clues): result = self.go_proc.stdout.readline() while result.strip() != ".": clue = eval(result) result = self.go_proc.stdout.readline() if clue == []: continue answer = clue[-1].lower() if answer in phrasing or any(x.startswith(answer) for x in phrasing): continue answers_with_clues.append(AnnotatedAnswer(answer, clue)) else: for i, clue in enumerate(possible_clues): # print clue self.go_proc.stdin.write(str(clue) + "\n") self.go_proc.stdin.write(".\n") result = self.go_proc.stdout.readline() while result.strip() != ".": if result[0] == "#": print result result = self.go_proc.stdout.readline() continue clue = eval(result) result = self.go_proc.stdout.readline() if clue == []: continue answer = clue[-1].lower() if answer in phrasing or any(x.startswith(answer) for x in phrasing): continue answers_with_clues.append(AnnotatedAnswer(answer, clue)) return sorted(answers_with_clues, reverse=True)