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"))
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)))
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)))
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)))
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)))
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)))
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 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)))
class WordSearchTests(unittest.TestCase): def test_initial_game_grid(self): puzzle = 'jefblpepre' searchAnswer = WordSearch(puzzle).search('clojure') self.assertIsNone(searchAnswer) def test_left_to_right_word(self): puzzle = 'clojurermt' searchAnswer = WordSearch(puzzle).search('clojure') self.assertEqual(searchAnswer, (Point(0, 0), Point(6, 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))) def test_different_left_to_right_word(self): puzzle = 'coffeelplx' searchAnswer = WordSearch(puzzle).search('coffee') self.assertEqual(searchAnswer, (Point(0, 0), Point(5, 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))) def test_left_to_right_word_two_lines(self): puzzle = ('jefblpepre\n' 'tclojurerm\n') searchAnswer = WordSearch(puzzle).search('clojure') self.assertEqual(searchAnswer, (Point(1, 1), Point(7, 1))) def test_left_to_right_word_three_lines(self): puzzle = ('camdcimgtc\n' 'jefblpepre\n' 'clojurermt\n') searchAnswer = WordSearch(puzzle).search('clojure') self.assertEqual(searchAnswer, (Point(0, 2), Point(6, 2))) def test_left_to_right_word_ten_lines(self): puzzle = ('jefblpepre\n' 'camdcimgtc\n' 'oivokprjsm\n' 'pbwasqroua\n' 'rixilelhrs\n' 'wolcqlirpc\n' 'screeaumgr\n' 'alxhpburyi\n' 'jalaycalmp\n' 'clojurermt\n') searchAnswer = WordSearch(puzzle).search('clojure') self.assertEqual(searchAnswer, (Point(0, 9), Point(6, 9))) def test_left_to_right_word_ten_lines_different_position(self): puzzle = ('jefblpepre\n' 'camdcimgtc\n' 'oivokprjsm\n' 'pbwasqroua\n' 'rixilelhrs\n' 'wolcqlirpc\n' 'screeaumgr\n' 'alxhpburyi\n' 'clojurermt\n' 'jalaycalmp\n') searchAnswer = WordSearch(puzzle).search('clojure') self.assertEqual(searchAnswer, (Point(0, 8), Point(6, 8))) 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))) 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))) def test_single_word_right_to_left(self): puzzle = 'rixilelhrs' searchAnswer = WordSearch(puzzle).search('elixir') self.assertEqual(searchAnswer, (Point(5, 0), Point(0, 0))) @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_different_directions(self): self.assertEqual(self.example.search('clojure'), (Point(0, 9), Point(6, 9))) 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_should_accept_an_initial_game_grid_and_a_target_search_word(self): puzzle = WordSearch(["jefblpepre"]) self.assertIsNone(puzzle.search("clojure"))
def test_should_not_concatenate_different_lines_to_find_a_horizontal_word( self): puzzle = WordSearch(["abceli", "xirdfg"]) self.assertIsNone(puzzle.search("elixir"))
def test_should_locate_a_left_to_right_word_in_three_line_grid(self): puzzle = WordSearch(["camdcimgtc", "jefblpepre", "clojurermt"]) self.assertEqual(puzzle.search("clojure"), (Point(0, 2), Point(6, 2)))
def test_should_locate_a_left_to_right_word_in_two_line_grid(self): puzzle = WordSearch(["jefblpepre", "tclojurerm"]) self.assertEqual(puzzle.search("clojure"), (Point(1, 1), Point(7, 1)))
def test_should_locate_that_different_left_to_right_word_in_a_different_position( self): puzzle = WordSearch(["xcoffeezlp"]) self.assertEqual(puzzle.search("coffee"), (Point(1, 0), Point(6, 0)))
def test_should_locate_a_different_left_to_right_word(self): puzzle = WordSearch(["coffeelplx"]) self.assertEqual(puzzle.search("coffee"), (Point(0, 0), Point(5, 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)) )
def test_should_locate_the_same_word_written_left_to_right_in_a_different_position( self): puzzle = WordSearch(["mtclojurer"]) self.assertEqual(puzzle.search("clojure"), (Point(2, 0), Point(8, 0)))
def test_should_locate_one_word_written_left_to_right(self): puzzle = WordSearch(["clojurermt"]) self.assertEqual(puzzle.search("clojure"), (Point(0, 0), Point(6, 0)))
def test_should_not_wrap_around_horizontally_to_find_a_word(self): puzzle = WordSearch(["silabcdefp"]) self.assertIsNone(puzzle.search("lisp"))
def test_should_locate_a_single_word_written_right_to_left(self): puzzle = WordSearch(["rixilelhrs"]) self.assertEqual(puzzle.search("elixir"), (Point(5, 0), Point(0, 0)))
from word_search import WordSearch t = int(input("Enter number of Pages / Queries : ")) word_search = WordSearch() q = 0 for _ in range((t * 2)): input_list = input().strip().split() if input_list[0] == "P": word_search.insert(input_list[1:]) elif input_list[0] == "Q": ans = word_search.search(input_list[1:]) q += 1 print("Q{0}:".format(q), end=" ") if len(ans) <= 5: for i in ans: print(i, end=" ") else: for i in ans[:5]: print(i, end=" ") print()
def test_should_not_wrap_around_vertically_to_find_a_word(self): puzzle = WordSearch(["s", "u", "r", "a", "b", "c", "t"]) self.assertIsNone(puzzle.search("rust"))