def test_clueParsingClueObjectClueOnly(self): s = self.cp.parseClue(Clue('Guide graphite')) self.assertGreater(len(s), 0, 'Should find at least one solution!') s = s[0] self.assertEqual('lead', s.solution, 'Wrong solution found at first position!') self.assertEqual('double definition', s.typ, 'Wrong wordplay type applied!')
def object_hook(self, dct): if 'clue' in dct: return Clue(dct['clue']['row'], dct['clue']['column'], dct['clue']['length'], dct['clue']['direction'], dct['clue']['description'], dct['clue']['number'], dct['clue']['solution']) elif "puzzle" in dct: return Puzzle(dct["puzzle"]["size"], dct["puzzle"]["clues"]) return dct
def test_validClueWithEverything(self): c = Clue('This is a clue. (7)', length=7, typ='anagram', known_letters='D???p??') self.assertEqual(c.clue, 'This is a clue.') self.assertEqual(c.length, 7) self.assertEqual(c.typ, 'anagram') self.assertEqual(c.known_letters, 'd???p??') self.assertEqual(c.tokens, ['this', 'is', 'a', 'clue'])
def add_clues_down(clues, date): path_name = "puzs/" + date + ".puz" if not os.path.isfile(path_name): save_puzzle(date) p = puz.read(path_name) numbering = p.clue_numbering() for clue in numbering.down: answer = ''.join(p.solution[clue['cell'] + i] for i in range(clue['len'])) clues.append(Clue(clue['num'], Clue.DOWN, clue['clue'], answer)) return clues
def createClues(self): positionList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] descClueCount = 15 self.wallFile = open(self.wallFileName, "r") for groupCount in range(0, 4): for groupPosCount in range(0, 4): randomNumber = random.randint(0, descClueCount) randomPosition = positionList[randomNumber] del positionList[randomNumber] descClueCount -= 1 self.clueList.append( Clue(randomPosition, self.wallFile.readline().rstrip("\n"), self.groupList[groupCount], groupPosCount))
def get_answers(clue: Clue, limit=10): """Takes in a Clue object and returns a list of words (optionally associated with scores) which are potential answers to the given clue.""" params = {} length = clue.get_length() params["ml"] = clue.description params["sp"] = "?" * clue.length results = [] for item in request(params)[:limit]: guess = Guess(clue, item["word"], item["score"]) results.append(guess) return results
def parse(self, input_line, print_solns=True): """ Parse a given line of input. :param str input_line: :param bool print_solns: Whether to print solns :return: List of solution objects :rtype: list[solution.Solution] """ logging.debug("parsing") clue_words, answer_length = self.parse_length(input_line) if not clue_words or answer_length == 0: # error logging.debug("failed to parse out length") return [] clue = Clue(clue_words, answer_length) solns = [] for s in self.solvers: logging.info("Running " + str(s)) new_solns = s.get_solutions(clue) logging.info(str(s) + " got " + str(len(new_solns)) + " solutions") solns += new_solns solns = sorted(solns) # run secondary, expensive solvers if not solns or solns[-1].score < secondary_solver_cutoff: logging.info("Running auxiliary solvers") for s in self.aux_solvers: logging.info("Running " + str(s)) new_solns = s.get_solutions(clue) logging.info(str(s) + " got " + str(len(new_solns)) + " solns") solns += new_solns solns = sorted(solns) # todo: get rid of duplicates? # todo: scale relative anagramers ret = sorted(solns)[-cmd_line_args.num_solns:] if print_solns: for soln in ret: if cmd_line_args.no_solution_breakdown: print soln.solution else: print str(soln) + "\n" return ret
def test_clu10_curl_space(self): clu = Clue('if (a) {}') clu.parse() self.assertEqual(2, clu.subPaths())
def test_clu8(self): clu = Clue('if (a) {}') clu.parse() self.assertEqual(1, clu.subPathConjecture())
def test_verify1(self): code = 'if (a) {}' clu = Clue(code) clu.parse() self.assertTrue(clu.verify().startswith('[0]'))
def test_clu7(self): clu = Clue('while (i<10) {}') clu.parse() self.assertEqual([1, 0], clu.clue())
def test_clupath_4(self): code = 'if (a) { if (b) {}} if (c) {}' clu = Clue(code) clu.parse() self.assertEqual([[1,[0]], [1, [0]], [2, [0]]], clu.path())
def test_clue00(self): clu = Clue('if(a) {}') clu.parse() self.assertEqual([1, Fraction(0, 1)], clu.clue())
def test_colloc18_xi(self): code = 'if (0<1) {} if (9>k && 1<n) { } if (2==n && 9>f) {}' clu = Clue(code) clu.parse() self.assertEqual([6, Fraction(1,3)+Fraction(1,3)], clu.clue())
def test_colloc17_subPaths(self): code = 'if (0<1) {} if (9>k && 1<n) { } if (2==n || 9>f) {}' clu = Clue(code) clu.parse() self.assertEqual(18, clu.subPaths())
def test_while_subPaths(self): code = 'while (i<=9) { }' clu = Clue(code) clu.parse() self.assertEqual(2, clu.subPaths())
def test_clupath_1(self): code = 'if (a) {}' clu = Clue(code) clu.parse() self.assertEqual([[1, [0]]], clu.path())
def test_colloc18_cabe(self): code = 'if (0<1) {} if (9>k && 1<n) { } if (2==n && 9>f) {}' clu = Clue(code) clu.parse() self.assertEqual(6, clu.cabe())
def test_clupath_3(self): code = 'if (a || b) {}' clu = Clue(code) clu.parse() self.assertEqual([[1, [Fraction(1, 2)]]], clu.path())
def test_colloc18_subPathConjecture(self): code = 'if (0<1) {} if (9>k && 1<n) { } if (2==n && 9>f) {}' clu = Clue(code) clu.parse() self.assertEqual(7, clu.subPathConjecture())
def test_clupath_5(self): code = 'if (a && b || c && d) {}' clu = Clue(code) clu.parse() self.assertEqual([[1, [Fraction(2,5), Fraction(3,2), Fraction(2,5)]]], clu.path())
def test_for_xi(self): code = 'for (int i; i<=9; i++) { }' clu = Clue(code) clu.parse() self.assertEqual([1, 0], clu.clue())
def test_clupath6(self): code = 'if (a) { if (b) {} } if (c && c1) {} if (d || d1) {} if (e) {}' clu = Clue(code) clu.parse() self.assertEqual([[1, [0]], [1, [0]], [2, [Fraction(1,3)]], [3, [Fraction(1,2)]], [4, [0]]], clu.path())
def test_clu6(self): clu = Clue('for(int i=0; i<10; i++) {}') clu.parse() self.assertEqual([1, 0], clu.clue())
def test_verify2(self): code = 'if (a) {} if (b) {}' clu = Clue(code) clu.parse() self.assertTrue('[0]' in clu.verify() and '[9]' in clu.verify())
def test_for_subPaths(self): code = 'for (int i; i<=9; i++) { }' clu = Clue(code) clu.parse() self.assertEqual(2, clu.cabe())
def test_clu9(self): clu = Clue('if (a) { if (b) {}}') clu.parse() self.assertEqual(3, clu.subPathConjecture())
def test_while_xi(self): code = 'while (i<=9) { }' clu = Clue(code) clu.parse() self.assertEqual([1, 0], clu.clue())
def test_clu11(self): clu = Clue('if (a) { if (b) {} }') clu.parse() self.assertEqual(3, clu.subPaths())
def test_while_cabe(self): code = 'while (i<=9) { }' clu = Clue(code) clu.parse() self.assertEqual(2, clu.cabe())