Example #1
0
 def test_word_proximity_search(self):
     """Test proximity search which is default"""
     search = WordSearch()
     match = search.perform_search(TEST_BLOCK1, SEARCH1)
     self.assertTrue(match)
     with self.assertRaises(type(PARAMETER_EXCEPTION)):
         search.perform_search(TEST_BLOCK1, EMPTY)
Example #2
0
 def test_should_fail_to_locate_words_that_are_not_on_horizontal_vertical_or_diagonal_lines(
     self, ):
     puzzle = WordSearch(["abc", "def"])
     self.assertIsNone(puzzle.search("aef"))
     self.assertIsNone(puzzle.search("ced"))
     self.assertIsNone(puzzle.search("abf"))
     self.assertIsNone(puzzle.search("cbd"))
Example #3
0
 def test_multiple_words(self):
     puzzle = [
         'jefblpepre', 'camdcimgtc', 'oivokprjsm', 'pbwasqroua',
         'rixilelhrs', 'wolcqlirpc', 'fortranftw', 'alxhpburyi',
         'jalaycalmp', 'clojurermt'
     ]
     searchAnswer = WordSearch(puzzle).search('fortran')
     self.assertEqual(searchAnswer, (Point(0, 6), Point(6, 6)))
     searchAnswer = WordSearch(puzzle).search('clojure')
     self.assertEqual(searchAnswer, (Point(0, 9), Point(6, 9)))
Example #4
0
 def setUpClass(self):
     puzzle = ('jefblpepre\n'
               'camdcimgtc\n'
               'oivokprjsm\n'
               'pbwasqroua\n'
               'rixilelhrs\n'
               'wolcqlirpc\n'
               'screeaumgr\n'
               'alxhpburyi\n'
               'jalaycalmp\n'
               'clojurermt')
     self.example = WordSearch(puzzle)
def main(word_list_filename, grid):
    """The main function of word_search_app program.

        Args:
            word_list_filename (str) - full path input word-list text file
            grid (list) - letters grid as list of n m-letters str

        Returns:
            none
    """
    word_search = WordSearch(grid, word_list_filename)
    word_search.print_found_words()
    print(word_search.found_words(), "words found")
Example #6
0
 def test_should_locate_a_left_to_right_word_in_ten_line_grid(self):
     puzzle = WordSearch([
         "jefblpepre",
         "camdcimgtc",
         "oivokprjsm",
         "pbwasqroua",
         "rixilelhrs",
         "wolcqlirpc",
         "screeaumgr",
         "alxhpburyi",
         "jalaycalmp",
         "clojurermt",
     ])
     self.assertEqual(puzzle.search("clojure"), (Point(0, 9), Point(6, 9)))
Example #7
0
class WordSearchTests(unittest.TestCase):
    @classmethod
    def setUpClass(self):
        puzzle = ('jefblpepre\n'
                  'camdcimgtc\n'
                  'oivokprjsm\n'
                  'pbwasqroua\n'
                  'rixilelhrs\n'
                  'wolcqlirpc\n'
                  'screeaumgr\n'
                  'alxhpburyi\n'
                  'jalaycalmp\n'
                  'clojurermt')
        self.example = WordSearch(puzzle)

    def test_horizontal_words_left_to_right(self):
        self.assertEqual(self.example.search('clojure'),
                         (Point(0, 9), Point(6, 9)))

    def test_horizontal_words_right_to_left(self):
        self.assertEqual(self.example.search('elixir'),
                         (Point(5, 4), Point(0, 4)))

    def test_vertical_words_top_to_bottom(self):
        self.assertEqual(self.example.search('ecmascript'),
                         (Point(9, 0), Point(9, 9)))

    def test_vertical_words_bottom_to_top(self):
        self.assertEqual(self.example.search('rust'),
                         (Point(8, 4), Point(8, 1)))

    def test_diagonal_words_top_left_to_bottom_right(self):
        self.assertEqual(self.example.search('java'),
                         (Point(0, 0), Point(3, 3)))

    def test_diagonal_upper_bottom_right_to_top_left(self):
        self.assertEqual(self.example.search('lua'),
                         (Point(7, 8), Point(5, 6)))

    def test_diagonal_upper_bottom_left_to_top_right(self):
        self.assertEqual(self.example.search('lisp'),
                         (Point(2, 5), Point(5, 2)))

    def test_diagonal_upper_top_right_to_bottom_left(self):
        self.assertEqual(self.example.search('ruby'),
                         (Point(7, 5), Point(4, 8)))

    def test_words_that_are_not_in_the_puzzle(self):
        self.assertIsNone(self.example.search('haskell'))

    def test_search_differently_sized_puzzles(self):
        puzzle = ('qwertyuiopz\n' 'luamsicrexe\n' 'abcdefghijk')
        self.assertEqual(
            WordSearch(puzzle).search('exercism'), (Point(10, 1), Point(3, 1)))
Example #8
0
 def test_multiple_words(self):
     puzzle = ('jefblpepre\n'
               'camdcimgtc\n'
               'oivokprjsm\n'
               'pbwasqroua\n'
               'rixilelhrs\n'
               'wolcqlirpc\n'
               'fortranftw\n'
               'alxhpburyi\n'
               'jalaycalmp\n'
               'clojurermt\n')
     searchAnswer = WordSearch(puzzle).search('fortran')
     self.assertEqual(searchAnswer, (Point(0, 6), Point(6, 6)))
     searchAnswer = WordSearch(puzzle).search('clojure')
     self.assertEqual(searchAnswer, (Point(0, 9), Point(6, 9)))
Example #9
0
 def test_should_locate_multiple_words(self):
     puzzle = WordSearch([
         "jefblpepre",
         "camdcimgtc",
         "oivokprjsm",
         "pbwasqroua",
         "rixilelhrs",
         "wolcqlirpc",
         "fortranftw",
         "alxhpburyi",
         "jalaycalmp",
         "clojurermt",
     ])
     self.assertEqual(puzzle.search("fortran"), (Point(0, 6), Point(6, 6)))
     self.assertEqual(puzzle.search("clojure"), (Point(0, 9), Point(6, 9)))
Example #10
0
 def test_should_locate_multiple_words_written_in_different_horizontal_directions(
         self):
     puzzle = WordSearch([
         "jefblpepre",
         "camdcimgtc",
         "oivokprjsm",
         "pbwasqroua",
         "rixilelhrs",
         "wolcqlirpc",
         "screeaumgr",
         "alxhpburyi",
         "jalaycalmp",
         "clojurermt",
     ])
     self.assertEqual(puzzle.search("elixir"), (Point(5, 4), Point(0, 4)))
     self.assertEqual(puzzle.search("clojure"), (Point(0, 9), Point(6, 9)))
Example #11
0
 def setUpClass(cls):
     puzzle = [
         'jefblpepre', 'camdcimgtc', 'oivokprjsm', 'pbwasqroua',
         'rixilelhrs', 'wolcqlirpc', 'screeaumgr', 'alxhpburyi',
         'jalaycalmp', 'clojurermt'
     ]
     cls.example = WordSearch(puzzle)
class WordSearchTests(unittest.TestCase):

    def setUp(self):
        self.word_search = WordSearch("puzzle.txt")

    def test_reading_words_from_text_file(self):
        self.assertEqual(self.word_search.words,['BONES', 'KHAN', 'KIRK', 'SCOTTY', 'SPOCK', 'SULU', 'UHURA'])

    def test_reading_puzzle_from_text_file(self):
        self.word_search_2 = WordSearch("puzzle_test.txt")
        self.assertEqual(self.word_search_2.puzzle, [['U','M','K','H'],['L','L','S','H'],
                                                    ['H','S','U','P'],['B','R','J','S']])

    def test_getting_first_letter_of_first_word(self):
        self.word_search.get_next_letter()
        self.assertEqual(self.word_search.current_letter,'B')
Example #13
0
 def test_should_locate_words_written_top_to_bottom(self):
     puzzle = WordSearch([
         "jefblpepre",
         "camdcimgtc",
         "oivokprjsm",
         "pbwasqroua",
         "rixilelhrs",
         "wolcqlirpc",
         "screeaumgr",
         "alxhpburyi",
         "jalaycalmp",
         "clojurermt",
     ])
     self.assertEqual(puzzle.search("clojure"), (Point(0, 9), Point(6, 9)))
     self.assertEqual(puzzle.search("elixir"), (Point(5, 4), Point(0, 4)))
     self.assertEqual(puzzle.search("ecmascript"),
                      (Point(9, 0), Point(9, 9)))
Example #14
0
 def test_different_left_to_right_word_ten_lines(self):
     puzzle = [
         'jefblpepre', 'camdcimgtc', 'oivokprjsm', 'pbwasqroua',
         'rixilelhrs', 'wolcqlirpc', 'fortranftw', 'alxhpburyi',
         'clojurermt', 'jalaycalmp'
     ]
     searchAnswer = WordSearch(puzzle).search('fortran')
     self.assertEqual(searchAnswer, (Point(0, 6), Point(6, 6)))
Example #15
0
 def setUpClass(self):
     puzzle = ('jefblpepre\n'
               'camdcimgtc\n'
               'oivokprjsm\n'
               'pbwasqroua\n'
               'rixilelhrs\n'
               'wolcqlirpc\n'
               'screeaumgr\n'
               'alxhpburyi\n'
               'jalaycalmp\n'
               'clojurermt')
     self.example = WordSearch(puzzle)
Example #16
0
 def test_different_left_to_right_word_ten_lines(self):
     puzzle = ('jefblpepre\n'
               'camdcimgtc\n'
               'oivokprjsm\n'
               'pbwasqroua\n'
               'rixilelhrs\n'
               'wolcqlirpc\n'
               'fortranftw\n'
               'alxhpburyi\n'
               'clojurermt\n'
               'jalaycalmp\n')
     searchAnswer = WordSearch(puzzle).search('fortran')
     self.assertEqual(searchAnswer, (Point(0, 6), Point(6, 6)))
Example #17
0
def wordsearch(matrix, words, train_data, train_labels):
    """
    This is the function that we have been asked to write for the assignment. This function takes a word search image
    (as pixels), a list of words and some training data and labels and will output the solved word search.
    :param matrix: A matrix representing an image of the word search grid to be processed.
    :param words: A list of words to be found in the word search.
    :param train_data: Training data to classify letters in the word search.
    :param train_labels: Training labels for the training data.
    :return:
    """
    word_search = WordSearch(matrix, letter_size, words, train_data,
                             train_labels,
                             True)  # true for dimension reduction
    word_search.solve()
    #word_search.find_word("DON")
    word_search.print()
    word_search.show()
Example #18
0
 def test_should_fail_to_locate_a_word_that_is_not_in_the_puzzle(self):
     puzzle = WordSearch([
         "jefblpepre",
         "camdcimgtc",
         "oivokprjsm",
         "pbwasqroua",
         "rixilelhrs",
         "wolcqlirpc",
         "screeaumgr",
         "alxhpburyi",
         "jalaycalmp",
         "clojurermt",
     ])
     self.assertEqual(puzzle.search("clojure"), (Point(0, 9), Point(6, 9)))
     self.assertEqual(puzzle.search("elixir"), (Point(5, 4), Point(0, 4)))
     self.assertEqual(puzzle.search("ecmascript"),
                      (Point(9, 0), Point(9, 9)))
     self.assertEqual(puzzle.search("rust"), (Point(8, 4), Point(8, 1)))
     self.assertEqual(puzzle.search("java"), (Point(0, 0), Point(3, 3)))
     self.assertEqual(puzzle.search("lua"), (Point(7, 8), Point(5, 6)))
     self.assertEqual(puzzle.search("lisp"), (Point(2, 5), Point(5, 2)))
     self.assertEqual(puzzle.search("ruby"), (Point(7, 5), Point(4, 8)))
     self.assertIsNone(puzzle.search("haskell"))
    def test420_when_word_search_is_created_with_bad_grid_error_is_raised(self):
        method = "test420_when_word_search_is_created_with_bad_grid_error_is_raised"
        csv_file = CSV_BAD_GRID

        self.log.info(
            logger_helper.format_log(classname=self.classname, method=method, msg="Started ------------------")
        )

        self.log.info(
            logger_helper.format_log(classname=self.classname, method=method, msg="Expecting GridDimensionException")
        )
        with self.assertRaises(GridDimensionException, msg=f"GridDimensionException should have been triggered"):
            _ = WordSearch(word_search_csv=csv_file)

        self.log.info(
            logger_helper.format_log(classname=self.classname, method=method, msg="Completed ----------------")
        )
        return
    def test410_when_word_search_is_created_with_empty_file_error_is_raised(self):
        method = "test410_when_word_search_is_created_with_empty_file_error_is_raised"
        csv_file = CSV_EMPTY

        self.log.info(
            logger_helper.format_log(classname=self.classname, method=method, msg="Started ------------------")
        )

        self.log.info(
            logger_helper.format_log(classname=self.classname, method=method, msg="Expecting FileFormatException")
        )
        with self.assertRaises(FileFormatException, msg=f"FileFormatException should have been triggered"):
            _ = WordSearch(word_search_csv=csv_file)

        self.log.info(
            logger_helper.format_log(classname=self.classname, method=method, msg="Completed ----------------")
        )
        return
Example #21
0
 def test_should_locate_words_written_bottom_left_to_top_right(self):
     puzzle = WordSearch([
         "jefblpepre",
         "camdcimgtc",
         "oivokprjsm",
         "pbwasqroua",
         "rixilelhrs",
         "wolcqlirpc",
         "screeaumgr",
         "alxhpburyi",
         "jalaycalmp",
         "clojurermt",
     ])
     self.assertEqual(puzzle.search("clojure"), (Point(0, 9), Point(6, 9)))
     self.assertEqual(puzzle.search("elixir"), (Point(5, 4), Point(0, 4)))
     self.assertEqual(puzzle.search("ecmascript"),
                      (Point(9, 0), Point(9, 9)))
     self.assertEqual(puzzle.search("rust"), (Point(8, 4), Point(8, 1)))
     self.assertEqual(puzzle.search("java"), (Point(0, 0), Point(3, 3)))
     self.assertEqual(puzzle.search("lua"), (Point(7, 8), Point(5, 6)))
     self.assertEqual(puzzle.search("lisp"), (Point(2, 5), Point(5, 2)))
    def test440_when_word_search_searches_for_notfound_words_no_coordinates_are_returned(self):
        method = "test440_when_word_search_searches_for_notfound_words_no_coordinates_are_returned"
        csv_file = CSV_NOTFOUND_WORDS

        self.log.info(
            logger_helper.format_log(classname=self.classname, method=method, msg="Started ------------------")
        )

        word_search = WordSearch(word_search_csv=csv_file)
        result_dict = word_search.get_solution()
        for w_str in word_search.get_word_list_as_strings():
            self.assertTrue(w_str in result_dict, msg=f"{w_str} is not in results with {len(result_dict)}")
            self.assertFalse(len(result_dict[w_str]), msg=f"{w_str} has no value so nothing was found")

        for w in result_dict:
            self.log.info(
                logger_helper.format_log(classname=self.classname, method=method, msg=f"{w} {result_dict[w]}")
            )

        self.log.info(
            logger_helper.format_log(classname=self.classname, method=method, msg="Completed ----------------")
        )
        return
class TestWordSearch(unittest.TestCase):

    ws = WordSearch("test_puzzle.txt")
    ws.solve_puzzle()

    def testIfPuzzleDataWasExtractedFromFile(self):
        expected_words = [
            "APE", "ART", "AIR", "ANT", "AXE", "ACE", "ALE", "ARK"
        ]
        expected_board = [['K','B','E','D','T'], \
                            ['F','R','P','R','G'], \
                            ['E','L','A','I','R'], \
                            ['H','C','X','N','J'], \
                            ['E','M','E','O','T']]

        self.assertListEqual(self.ws.words, expected_words)
        self.assertListEqual(self.ws.board, expected_board)

    def testIfPuzzleBoardIsSquare(self):
        board_row_len = len(self.ws.board)
        board_col_len = len(self.ws.board[0])
        self.assertEqual(board_row_len, board_col_len)

    def testFindWordNorth(self):
        test_word = "APE"
        expected_output = [[2, 2], [2, 1], [2, 0]]

        actual_output = self.ws.answers[test_word]
        self.assertListEqual(actual_output, expected_output)

    def testFindWordSouth(self):
        test_word = "AXE"
        expected_output = [[2, 2], [2, 3], [2, 4]]

        actual_output = self.ws.answers[test_word]
        self.assertListEqual(actual_output, expected_output)

    def testFindWordEast(self):
        test_word = "AIR"
        expected_output = [[2, 2], [3, 2], [4, 2]]

        actual_output = self.ws.answers[test_word]
        self.assertListEqual(actual_output, expected_output)

    def testFindWordWest(self):
        test_word = "ALE"
        expected_output = [[2, 2], [1, 2], [0, 2]]

        actual_output = self.ws.answers[test_word]
        self.assertListEqual(actual_output, expected_output)

    def testFindWordNorthEast(self):
        test_word = "ART"
        expected_output = [[2, 2], [3, 1], [4, 0]]

        actual_output = self.ws.answers[test_word]
        self.assertListEqual(actual_output, expected_output)

    def testFindWordSouthEast(self):
        test_word = "ANT"
        expected_output = [[2, 2], [3, 3], [4, 4]]

        actual_output = self.ws.answers[test_word]
        self.assertListEqual(actual_output, expected_output)

    def testFindWordSouthWest(self):
        test_word = "ACE"
        expected_output = [[2, 2], [1, 3], [0, 4]]

        actual_output = self.ws.answers[test_word]
        self.assertListEqual(actual_output, expected_output)

    def testFindWordNorthWest(self):
        test_word = "ARK"
        expected_output = [[2, 2], [1, 1], [0, 0]]

        actual_output = self.ws.answers[test_word]
        self.assertListEqual(actual_output, expected_output)
Example #24
0
class WordSearchTests(unittest.TestCase):

    @classmethod
    def setUpClass(self):
        puzzle = ('jefblpepre\n'
                  'camdcimgtc\n'
                  'oivokprjsm\n'
                  'pbwasqroua\n'
                  'rixilelhrs\n'
                  'wolcqlirpc\n'
                  'screeaumgr\n'
                  'alxhpburyi\n'
                  'jalaycalmp\n'
                  'clojurermt')
        self.example = WordSearch(puzzle)

    def test_horizontal_words_left_to_right(self):
        self.assertEqual(
            self.example.search('clojure'),
            (Point(0, 9), Point(6, 9))
        )

    def test_horizontal_words_right_to_left(self):
        self.assertEqual(
            self.example.search('elixir'),
            (Point(5, 4), Point(0, 4))
        )

    def test_vertical_words_top_to_bottom(self):
        self.assertEqual(
            self.example.search('ecmascript'),
            (Point(9, 0), Point(9, 9))
        )

    def test_vertical_words_bottom_to_top(self):
        self.assertEqual(
            self.example.search('rust'),
            (Point(8, 4), Point(8, 1))
        )

    def test_diagonal_words_top_left_to_bottom_right(self):
        self.assertEqual(
            self.example.search('java'),
            (Point(0, 0), Point(3, 3))
        )

    def test_diagonal_upper_bottom_right_to_top_left(self):
        self.assertEqual(
            self.example.search('lua'),
            (Point(7, 8), Point(5, 6))
        )

    def test_diagonal_upper_bottom_left_to_top_right(self):
        self.assertEqual(
            self.example.search('lisp'),
            (Point(2, 5), Point(5, 2))
        )

    def test_diagonal_upper_top_right_to_bottom_left(self):
        self.assertEqual(
            self.example.search('ruby'),
            (Point(7, 5), Point(4, 8))
        )

    def test_words_that_are_not_in_the_puzzle(self):
        self.assertIsNone(self.example.search('haskell'))

    def test_search_differently_sized_puzzles(self):
        puzzle = ('qwertyuiopz\n'
                  'luamsicrexe\n'
                  'abcdefghijk')
        self.assertEqual(
            WordSearch(puzzle).search('exercism'),
            (Point(10, 1), Point(3, 1))
        )
Example #25
0
 def test_single_word_right_to_left(self):
     puzzle = ['rixilelhrs']
     searchAnswer = WordSearch(puzzle).search('elixir')
     self.assertEqual(searchAnswer, (Point(5, 0), Point(0, 0)))
Example #26
0
 def test_initial_game_grid(self):
     puzzle = ['jefblpepre']
     searchAnswer = WordSearch(puzzle).search('clojure')
     self.assertIsNone(searchAnswer)
Example #27
0
 def test_left_to_right_word_three_lines(self):
     puzzle = ['camdcimgtc', 'jefblpepre', 'clojurermt']
     searchAnswer = WordSearch(puzzle).search('clojure')
     self.assertEqual(searchAnswer, (Point(0, 2), Point(6, 2)))
Example #28
0
 def test_left_to_right_word_two_lines(self):
     puzzle = ['jefblpepre', 'tclojurerm']
     searchAnswer = WordSearch(puzzle).search('clojure')
     self.assertEqual(searchAnswer, (Point(1, 1), Point(7, 1)))
Example #29
0
 def test_different_left_to_right_word_different_position(self):
     puzzle = ['xcoffeezlp']
     searchAnswer = WordSearch(puzzle).search('coffee')
     self.assertEqual(searchAnswer, (Point(1, 0), Point(6, 0)))
Example #30
0
 def test_different_left_to_right_word(self):
     puzzle = ['coffeelplx']
     searchAnswer = WordSearch(puzzle).search('coffee')
     self.assertEqual(searchAnswer, (Point(0, 0), Point(5, 0)))
Example #31
0
 def test_left_to_right_word_different_position(self):
     puzzle = ['mtclojurer']
     searchAnswer = WordSearch(puzzle).search('clojure')
     self.assertEqual(searchAnswer, (Point(2, 0), Point(8, 0)))
Example #32
0
 def test_left_to_right_word(self):
     puzzle = ['clojurermt']
     searchAnswer = WordSearch(puzzle).search('clojure')
     self.assertEqual(searchAnswer, (Point(0, 0), Point(6, 0)))