示例#1
0
文件: test.py 项目: jbloemendal/clue
    def test_self1_xi_post(self):
        code = '{ if (a) { } if (b) { } if (c) { } }'
        clu = Clue(code)
        clu.parse()
        parallel = clu.clue()

        code = '{ if (a) { if (b) { if (c) { } } } }'
        clu = Clue(code)
        clu.parse()
        orthogonal = clu.clue()

        self.assertEqual(True, orthogonal[0] < parallel[0]) 
示例#2
0
    def test_collision(self):
        sample_clue = Clue(0, 2, 4, "D", "", 0, "KIND")
        sample_clue_2 = Clue(0, 3, 5, "D", "", 1, "SPACE")
        sample_clue_3 = Clue(2, 0, 4, "A", "", 2, "IDEA")

        sample_guess = Guess(sample_clue, "KIND", 4)
        sample_guess_2 = Guess(sample_clue_2, "SPACE", 6)
        sample_guess_3 = Guess(sample_clue_3, "IDEA", 5)

        self.assertEqual(None, collide(sample_guess, sample_guess_2))
        self.assertEqual(None, collide(sample_guess_3, sample_guess_2))
        self.assertEqual((sample_guess, sample_guess_3),
                         collide(sample_guess, sample_guess_3))
示例#3
0
    def test_check_fit(self):
        sample_clue = Clue(0, 2, 4, "D", "", 0, "KIND")
        sample_clue_2 = Clue(0, 3, 5, "D", "", 1, "SPACE")
        sample_clue_3 = Clue(2, 0, 4, "A", "", 2, "IDEA")

        grid = init_grid([sample_clue, sample_clue_2, sample_clue_3], 5)

        sample_guess = Guess(sample_clue, "KIND", 4)
        sample_guess_2 = Guess(sample_clue_2, "SPACE", 6)
        sample_guess_3 = Guess(sample_clue_3, "IDEASS", 5)

        self.assertEqual("fit", check_fit(grid, sample_guess))
        self.assertEqual("fit", check_fit(grid, sample_guess_2))
        self.assertEqual("bounds_error", check_fit(grid, sample_guess_3))
示例#4
0
    def test_find_best_set(self):
        sample_clue = Clue(0, 2, 4, "D", "", 0, "KIND")
        sample_clue_2 = Clue(0, 3, 5, "D", "", 1, "SPACE")
        sample_clue_3 = Clue(2, 0, 4, "A", "", 2, "IDEA")

        sample_guess = Guess(sample_clue, "KIND", 4)
        sample_guess_2 = Guess(sample_clue_2, "SPACE", 6)
        sample_guess_3 = Guess(sample_clue_3, "IDEA", 5)

        guess_set = set()
        guess_set.add(sample_guess)
        guess_set.add(sample_guess_2)
        returned_set = find_best_guess_set(guess_set, sample_guess_3)

        self.assertEqual(set([sample_guess_2, sample_guess_3]), returned_set)
示例#5
0
 def test_validClueWithLengthAndKnownLetters(self):
     c = Clue('This is a clue. (7)', known_letters='????p??')
     self.assertEqual(c.clue, 'This is a clue.')
     self.assertEqual(c.length, 7)
     self.assertEqual(c.typ, None)
     self.assertEqual(c.known_letters, '????p??')
     self.assertEqual(c.tokens, ['this', 'is', 'a', 'clue'])
示例#6
0
 def test_validClueWithLengthAndType(self):
     c = Clue('This is a clue. (7)', typ='initial')
     self.assertEqual(c.clue, 'This is a clue.')
     self.assertEqual(c.length, 7)
     self.assertEqual(c.typ, 'initial')
     self.assertEqual(c.known_letters, None)
     self.assertEqual(c.tokens, ['this', 'is', 'a', 'clue'])
示例#7
0
 def test_validClueMinimal(self):
     c = Clue('This is a clue.')
     self.assertEqual(c.clue, 'This is a clue.')
     self.assertEqual(c.length, None)
     self.assertEqual(c.typ, None)
     self.assertEqual(c.known_letters, None)
     self.assertEqual(c.tokens, ['this', 'is', 'a', 'clue'])
 def test_clueParsingClueObjectSolnLengthSeparate(self):
     s = self.cp.parseClue(Clue('In job, sole technician, dated.', 8))
     self.assertGreater(len(s), 0, 'Should find at least one solution!')
     s = s[0]
     self.assertEqual('obsolete', s.solution,
                      'Wrong solution found at first position!')
     self.assertEqual('run', s.typ, 'Wrong wordplay type applied!')
示例#9
0
    def test_matrix_score(self):
        sample_clue = Clue(0, 2, 4, "D", "", 0, "KIND")
        sample_clue_2 = Clue(0, 3, 5, "D", "", 1, "SPACE")
        sample_clue_3 = Clue(2, 0, 4, "A", "", 2, "IDEA")

        sample_guess = Guess(sample_clue, "KIND", 4)
        sample_guess_2 = Guess(sample_clue_2, "SPACE", 6)
        sample_guess_3 = Guess(sample_clue_3, "IDEA", 5)

        grid_empty = init_grid([sample_clue, sample_clue_2, sample_clue_3], 5)
        grid_from_guesses = make_grid_from_guesses(
            [sample_guess, sample_guess_2, sample_guess_3],
            [sample_clue, sample_clue_2, sample_clue_3], 5)

        self.assertEqual(0, matrix_score(grid_empty))
        self.assertEqual(11 / 25, matrix_score(grid_from_guesses))
 def test_clueParsingClueObjectWordplayTypeGiven(self):
     s = self.cp.parseClue(Clue('Zoroastrian pairs dancing.',
                                typ='anagram'))
     self.assertGreater(len(s), 0, 'Should find at least one solution!')
     s = s[0]
     self.assertEqual('parsi', s.solution,
                      'Wrong solution found at first position!')
     self.assertEqual('anagram', s.typ, 'Wrong wordplay type applied!')
 def test_clueParsingClueObjectSolnLengthInText(self):
     s = self.cp.parseClue(
         Clue('House of God in Sencha Pellegrini bar. (6)'))
     self.assertGreater(len(s), 0, 'Should find at least one solution!')
     s = s[0]
     self.assertEqual('chapel', s.solution,
                      'Wrong solution found at first position!')
     self.assertEqual('run', s.typ, 'Wrong wordplay type applied!')
 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!')
示例#13
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
示例#14
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'])
示例#15
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
示例#16
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))
示例#17
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
示例#18
0
文件: test.py 项目: jbloemendal/clue
 def test_clu11(self):
     clu = Clue('if (a) { if (b) {} }')
     clu.parse()
     self.assertEqual(3, clu.subPaths())
示例#19
0
文件: test.py 项目: jbloemendal/clue
 def test_clupath_1(self):
     code = 'if (a) {}'
     clu = Clue(code)
     clu.parse()
     self.assertEqual([[1, [0]]], clu.path())
示例#20
0
文件: test.py 项目: jbloemendal/clue
 def test_clu9(self):
     clu = Clue('if (a) { if (b) {}}')
     clu.parse()
     self.assertEqual(3, clu.subPathConjecture())
示例#21
0
文件: test.py 项目: jbloemendal/clue
 def test_clu10_curl_space(self):
     clu = Clue('if (a) {}')
     clu.parse()
     self.assertEqual(2, clu.subPaths())
示例#22
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())
示例#23
0
文件: test.py 项目: jbloemendal/clue
 def test_clu8(self):
     clu = Clue('if (a) {}')
     clu.parse()
     self.assertEqual(1, clu.subPathConjecture())
示例#24
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())
示例#25
0
文件: test.py 项目: jbloemendal/clue
 def test_verify1(self):
     code = 'if (a) {}'
     clu = Clue(code)
     clu.parse()
     self.assertTrue(clu.verify().startswith('[0]'))
示例#26
0
文件: test.py 项目: jbloemendal/clue
 def test_clu7(self):
     clu = Clue('while (i<10) {}')
     clu.parse()
     self.assertEqual([1, 0], clu.clue())
示例#27
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()) 
示例#28
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())
示例#29
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())
示例#30
0
文件: test.py 项目: jbloemendal/clue
 def test_clue00(self):
     clu = Clue('if(a) {}')
     clu.parse()
     self.assertEqual([1, Fraction(0, 1)], clu.clue())