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!')
예제 #2
0
 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
예제 #3
0
 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'])
예제 #4
0
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
예제 #5
0
    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))
예제 #6
0
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
예제 #7
0
파일: main.py 프로젝트: jsrozner/cryptic
    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
예제 #8
0
파일: test.py 프로젝트: jbloemendal/clue
 def test_clu10_curl_space(self):
     clu = Clue('if (a) {}')
     clu.parse()
     self.assertEqual(2, clu.subPaths())
예제 #9
0
파일: test.py 프로젝트: jbloemendal/clue
 def test_clu8(self):
     clu = Clue('if (a) {}')
     clu.parse()
     self.assertEqual(1, clu.subPathConjecture())
예제 #10
0
파일: test.py 프로젝트: jbloemendal/clue
 def test_verify1(self):
     code = 'if (a) {}'
     clu = Clue(code)
     clu.parse()
     self.assertTrue(clu.verify().startswith('[0]'))
예제 #11
0
파일: test.py 프로젝트: jbloemendal/clue
 def test_clu7(self):
     clu = Clue('while (i<10) {}')
     clu.parse()
     self.assertEqual([1, 0], clu.clue())
예제 #12
0
파일: test.py 프로젝트: jbloemendal/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())
예제 #13
0
파일: test.py 프로젝트: jbloemendal/clue
 def test_clue00(self):
     clu = Clue('if(a) {}')
     clu.parse()
     self.assertEqual([1, Fraction(0, 1)], clu.clue())
예제 #14
0
파일: test.py 프로젝트: jbloemendal/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()) 
예제 #15
0
파일: test.py 프로젝트: jbloemendal/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()) 
예제 #16
0
파일: test.py 프로젝트: jbloemendal/clue
 def test_while_subPaths(self):
     code = 'while (i<=9) { }'
     clu = Clue(code)
     clu.parse()
     self.assertEqual(2, clu.subPaths())
예제 #17
0
파일: test.py 프로젝트: jbloemendal/clue
 def test_clupath_1(self):
     code = 'if (a) {}'
     clu = Clue(code)
     clu.parse()
     self.assertEqual([[1, [0]]], clu.path())
예제 #18
0
파일: test.py 프로젝트: jbloemendal/clue
 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()) 
예제 #19
0
파일: test.py 프로젝트: jbloemendal/clue
 def test_clupath_3(self):
     code = 'if (a || b) {}'
     clu = Clue(code)
     clu.parse()
     self.assertEqual([[1, [Fraction(1, 2)]]], clu.path())
예제 #20
0
파일: test.py 프로젝트: jbloemendal/clue
 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()) 
예제 #21
0
파일: test.py 프로젝트: jbloemendal/clue
 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()) 
예제 #22
0
파일: test.py 프로젝트: jbloemendal/clue
 def test_for_xi(self):
     code = 'for (int i; i<=9; i++) { }'
     clu = Clue(code)
     clu.parse()
     self.assertEqual([1, 0], clu.clue())
예제 #23
0
파일: test.py 프로젝트: jbloemendal/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())
예제 #24
0
파일: test.py 프로젝트: jbloemendal/clue
 def test_clu6(self):
     clu = Clue('for(int i=0; i<10; i++) {}')
     clu.parse()
     self.assertEqual([1, 0], clu.clue())
예제 #25
0
파일: test.py 프로젝트: jbloemendal/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())
예제 #26
0
파일: test.py 프로젝트: jbloemendal/clue
 def test_for_subPaths(self):
     code = 'for (int i; i<=9; i++) { }'
     clu = Clue(code)
     clu.parse()
     self.assertEqual(2, clu.cabe())
예제 #27
0
파일: test.py 프로젝트: jbloemendal/clue
 def test_clu9(self):
     clu = Clue('if (a) { if (b) {}}')
     clu.parse()
     self.assertEqual(3, clu.subPathConjecture())
예제 #28
0
파일: test.py 프로젝트: jbloemendal/clue
 def test_while_xi(self):
     code = 'while (i<=9) { }'
     clu = Clue(code)
     clu.parse()
     self.assertEqual([1, 0], clu.clue())
예제 #29
0
파일: test.py 프로젝트: jbloemendal/clue
 def test_clu11(self):
     clu = Clue('if (a) { if (b) {} }')
     clu.parse()
     self.assertEqual(3, clu.subPaths())
예제 #30
0
파일: test.py 프로젝트: jbloemendal/clue
 def test_while_cabe(self):
     code = 'while (i<=9) { }'
     clu = Clue(code)
     clu.parse()
     self.assertEqual(2, clu.cabe())