Skip to content

Commit

Permalink
Broke out edict for server.
Browse files Browse the repository at this point in the history
  • Loading branch information
theovoss committed Apr 20, 2015
1 parent 0bbd793 commit a96b5ea
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 28 deletions.
16 changes: 8 additions & 8 deletions bogglesolver/solve_boggle.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ class SolveBoggle:

def __init__(self, use_test_words=False):
self.use_test_words = use_test_words
self.edict = Edict()
self.edict.read_dictionary(self.use_test_words)
# self.edict = Edict()
# self.edict.read_dictionary(self.use_test_words)
self.boggle = Boggle()
self.min_word_len = 3

Expand All @@ -40,7 +40,7 @@ def set_board(self, columns, rows, boggle_list=None):
else:
self.boggle.generate_boggle_board()

def solve(self, ignore_indexes=None, normal_adj=True, adjacency_funct=get_standard_boggle_adjacent):
def solve(self, edict, ignore_indexes=None, normal_adj=True, adjacency_funct=get_standard_boggle_adjacent):
"""
Solve the boggle board, or get all words for scrabble.
Expand All @@ -53,12 +53,12 @@ def solve(self, ignore_indexes=None, normal_adj=True, adjacency_funct=get_standa
assert self.boggle.is_full(), "Boggle board has not been set."
words = set()
for i, letter in enumerate(self.boggle.boggle_array):
node = self.edict.get_last_node(self.edict.dictionary_root, letter)
node = edict.get_last_node(edict.dictionary_root, letter)
if i not in ignore_indexes and node is not None:
self.recurse_search_for_words(i, node, ignore_indexes + [i], adjacency_funct, words)
self.recurse_search_for_words(i, edict, node, ignore_indexes + [i], adjacency_funct, words)
return sorted(words)

def recurse_search_for_words(self, a_index, node,
def recurse_search_for_words(self, a_index, edict, node,
indexes_searched, adjacency_funct, words=set()):
"""
Recursively search boggle board for words.
Expand All @@ -73,7 +73,7 @@ def recurse_search_for_words(self, a_index, node,
if not node.letters.keys():
return
for index in adjacency_funct(a_index, self.boggle.num_columns, self.boggle.num_rows, indexes_searched):
new_node = self.edict.get_last_node(node, self.boggle.boggle_array[index])
new_node = edict.get_last_node(node, self.boggle.boggle_array[index])
if new_node is not None:
self.recurse_search_for_words(index, new_node, indexes_searched + [index],
self.recurse_search_for_words(index, edict, new_node, indexes_searched + [index],
adjacency_funct, words)
39 changes: 24 additions & 15 deletions bogglesolver/test/integration_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,16 @@ def test_init(self):
rows = 1
array = ["w", "a", "t", "e", "r"]
solve_game = SolveBoggle(True)
edict = Edict()
solve_game.set_board(columns, rows, array)
solve_game.edict.add_word("wata")
solve_game.edict.add_word("wate")
solve_game.edict.add_word("a")
solve_game.edict.add_word("tear")
solve_game.edict.add_word("tea")
solve_game.edict.add_word("eat")
solved = solve_game.solve()
edict.add_word("wata")
edict.add_word("wate")
edict.add_word("water")
edict.add_word("a")
edict.add_word("tear")
edict.add_word("tea")
edict.add_word("eat")
solved = solve_game.solve(edict)
assert "water" in solved
assert "a" not in solved
assert "wata" not in solved
Expand All @@ -46,10 +48,10 @@ def test_init(self):
assert "tea" not in solved

solve_game.min_word_len = 0
solved = solve_game.solve()
solved = solve_game.solve(edict)
assert "a" in solved

solved = solve_game.solve(adjacency_funct=get_scrabble_adjacent)
solved = solve_game.solve(edict, adjacency_funct=get_scrabble_adjacent)
assert "water" in solved
assert "a" in solved
assert "wata" not in solved
Expand Down Expand Up @@ -89,14 +91,15 @@ def test_solves_Boggle(self):

solve_game = SolveBoggle()
solve_game.set_board(columns, rows, array)
edict = Edict()

# found words from: http://www.bogglecheat.net/, though may not be in my dictionary
known_words = ["knife", "mino", "bein", "fink", "nife", "glop", "polk", "mink", "fino", "jink", "nief", "knop", "ink", "fin", "jin", "nim", "kop", "pol", "fab", "fie", "nie", "kon", "lop", "ab", "ef", "if", "mi", "be", "jo", "ch", "on", "lo", "ae", "ea", "in", "ba", "fa", "no", "ko", "op", "po"]
for word in known_words:
solve_game.edict.add_word(word)
edict.add_word(word)

solve_game.min_word_len = 5
solved = solve_game.solve()
solved = solve_game.solve(edict)

for word in known_words:
if len(word) >= solve_game.min_word_len:
Expand All @@ -105,7 +108,7 @@ def test_solves_Boggle(self):
assert word not in solved

solve_game.min_word_len = 0
solved = solve_game.solve()
solved = solve_game.solve(edict)

for word in known_words:
if len(word) >= solve_game.min_word_len:
Expand Down Expand Up @@ -166,6 +169,8 @@ def test_pypi_4_by_4(self):
't', 's', 'i', 'e',
'a', 'n', 'i', 'a']

edict = Edict()

their_boggle = boggleboard.BoggleBoard(other_default_size, letters)
their_trie = boggleboard.Trie(WORD_LIST)

Expand All @@ -179,7 +184,7 @@ def test_pypi_4_by_4(self):
my_boggle.set_board(other_default_size, other_default_size, letters)

t1 = time.time()
my_words = my_boggle.solve()
my_words = my_boggle.solve(edict)
t2 = time.time()

my_solve_time = t2 - t1
Expand All @@ -205,6 +210,9 @@ def test_pypi_4_by_4(self):
def test_pypi_10_by_10(self):
"""Test 10x10 against the current boggle board on pypi."""
import boggleboard

edict = Edict()

other_default_size = 10
letters = ['o', 'i', 's', 'r', 'l', 'm', 'i', 'e', 'a', 't',
'g', 'e', 't', 'y', 'r', 'b', 'd', 's', 's', 'h',
Expand All @@ -230,7 +238,7 @@ def test_pypi_10_by_10(self):
my_boggle.set_board(other_default_size, other_default_size, letters)

t1 = time.time()
my_words = my_boggle.solve()
my_words = my_boggle.solve(edict)
t2 = time.time()

my_solve_time = t2 - t1
Expand All @@ -256,12 +264,13 @@ def test_pypi_10_by_10(self):
def test_100x100_time(self):
"""Test 100x100 against the current boggle board on pypi."""
import boggleboard
edict = Edict()
other_default_size = 100
my_boggle = SolveBoggle()
my_boggle.set_board(other_default_size, other_default_size)

t1 = time.time()
my_words = my_boggle.solve()
my_words = my_boggle.solve(edict)
t2 = time.time()

my_solve_time = t2 - t1
Expand Down
13 changes: 8 additions & 5 deletions bogglesolver/test/unit_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,35 +105,38 @@ class test_SolveMultiLetterBoggle(unittest.TestCase):

"""Unit tests for multi-letter solve game."""

edict = Edict()
edict.read_dictionary(True)

def test_MultiLetterBoard(self):
"""Test multi-letter."""
rows = 1
array = ["w", "at", "e", "r"]
word = "water"
solve_game = SolveBoggle(True)
solve_game = SolveBoggle()
solve_game.set_board(4, rows, array)
words = solve_game.solve()
words = solve_game.solve(self.edict)
print(words)
assert word in words
assert len(words) == 1

array = ["wa", "te", "r"]
solve_game.set_board(3, rows, array)
words = solve_game.solve()
words = solve_game.solve(self.edict)
print(words)
assert word in words
assert len(words) == 1

array = ["wat", "er"]
solve_game.set_board(2, rows, array)
words = solve_game.solve()
words = solve_game.solve(self.edict)
print(words)
assert word in words
assert len(words) == 1

array = ["water"]
solve_game.set_board(1, rows, array)
words = solve_game.solve()
words = solve_game.solve(self.edict)
print(words)
assert word in words
assert len(words) == 1
Expand Down

0 comments on commit a96b5ea

Please sign in to comment.