diff --git a/modules/active/boggle.py b/modules/active/boggle.py index bd8bfaa..3215772 100644 --- a/modules/active/boggle.py +++ b/modules/active/boggle.py @@ -30,7 +30,7 @@ DICE.append(['N','O','O','T','U','W']) DICE.append(['O','O','O','T','T','U']) bog_kern = [[-1,-1], [-1, 0], [-1, 1], - [ 0,-1] , [ 0, 1], + [ 0,-1], [ 0, 0], [ 0, 1], [ 1,-1], [ 1, 0], [ 1, 1]] bog_current = None @@ -135,39 +135,29 @@ def bog_verify(msgs, bog): ret = []; - # TODO migrate to creation of bog_current - bog_pad = [[""]*7] - for i in range(5): - t = [""]; - t.extend(bog[i]) - t.append("") - bog_pad.append(t) - bog_pad.append([""]*7) - - + import sys for m in msgs: if len(m)<=1: continue first = m[0].upper() # loop through bog, if first letter == m[0] then checkmachine - pos_r = pos_l = -1; + pos_r = pos_l = 0; for r in bog: - pos_r += 1 - pos_l = -1 + pos_l = 0 for l in r: - pos_l += 1 + valid = False if bog[pos_r][pos_l].upper() == first: - valid = check_valid(m[ 1:], bog_pad, [[pos_r+1,pos_l+1]]) - if(valid): - ret.append(m) + valid = check_valid(m[1:], bog, [[pos_r,pos_l]]) elif bog[pos_r][pos_l].upper() == first+"U": - valid = check_valid(m[ 1:], bog_pad, [[pos_r+1,pos_l+1]]) + valid = check_valid(m[1:], bog, [[pos_r,pos_l]]) if m[1].upper()=="U": - valid = valid or check_valid(m[ 2:], bog_pad, [[pos_r+1,pos_l+1]]) - if(valid): - ret.append(m) + valid = valid or check_valid(m[ 2:], bog, [[pos_r,pos_l]]) + if(valid): + ret.append(m) + pos_l += 1 + pos_r += 1 return list(set(ret)) @@ -180,26 +170,29 @@ def check_valid(m, bog, path): first = m[0].upper() + valid = False for k in bog_kern: - if ( ( bog[pos[0] + k[0]][pos[1]+k[1]].upper() == first) or \ - ( bog[pos[0] + k[0]][pos[1]+k[1]].upper() == first+"U") ) and \ - ( [pos[0] + k[0], pos[1]+k[1]] not in path) : + try: + if ( ( bog[pos[0] + k[0]][pos[1]+k[1]].upper() == first) or \ + ( bog[pos[0] + k[0]][pos[1]+k[1]].upper() == first+"U") ): + if [pos[0] + k[0], pos[1]+k[1]] in path: + continue + if(len(m) == 1 ): + valid = True + else: + cpath = list(path) + cpath.append([pos[0] + k[0],pos[1] + k[1]]) + + if check_valid(m[1:], bog, cpath): + valid = True + elif first == "Q": + valid = valid or check_valid(m[ 1:], bog, cpath ) + if m[1].upper()=="U": + valid = valid or check_valid(m[ 2:], bog, cpath) + except IndexError: + pass - if(len(m) == len(first) ): - return True - else: - cpath = path - cpath.append([pos[0] + k[0],pos[1] + k[1]]) - - if check_valid(m[1:], bog, cpath): - return True - elif first == "Q": - valid = check_valid(m[ 1:], bog_pad, cpath ) - if m[1].upper()=="U": - valid = valid or check_valid(m[ 2:], bog_pad, cpath ) - return valid - - return False + return valid def count_points(words): count = 0; diff --git a/testcases/test_boggle.py b/testcases/test_boggle.py new file mode 100755 index 0000000..67f0e79 --- /dev/null +++ b/testcases/test_boggle.py @@ -0,0 +1,27 @@ +#!/usr/bin/python +import os, sys + + +cwd = os.getcwd() +sys.path.append(os.path.join(cwd,"..","modules","active")) +sys.path.append(os.path.join(cwd,"..","sys",)) + +import boggle + +print "test 1", +t1=[['F', 'E', 'D', 'Qu', 'T'], + ['L', 'C', 'N', 'E', 'E'], + ['E', 'O', 'N', 'L', 'F'], + ['A', 'T', 'L', 'R', 'I'], + ['F', 'Y', 'E', 'S', 'R']] + +w1 = ['sir', 'rise', 'not', 'lone', 'toe', 'tea', 'fat', 'queen', 'lot', 'leaf', 'cone', 'teen','qee'] +ans = boggle.bog_verify(w1,t1) +ans.sort() +w1.sort() + +i=0 +for w in ans: + assert w==w1[i] + i+=1 +print "passed"