Boggle
|
random trip report |
Python source:
import math, sys
from dict import *
# return True if the num1 and num2 positions in the grid are adjacent
#
def adjacent(num1, num2, len):
num1_row = num1//len
num1_col = num1 % len
num2_row = num2//len
num2_col = num2 % len
if abs(num1_row - num2_row) >= 2:
return False
if abs(num1_col - num2_col) >= 2:
return False
return True
# return True is word is in board
# "used" says which letters have been used so far
#
def find_word(board, word, used, n, edge):
nused = len(used)
if nused:
last = used[nused-1]
for i in range(n):
if nused and i == last:
continue
if nused and not adjacent(i, last, edge):
continue
if board[i] != word[0]:
continue
if nused and i in used:
continue
used.append(i)
if len(word) == 1:
return True
return find_word(board, word[1:], used, n, edge)
return False
min_length = 4
# print list of all words in board
#
def solve(board, jumbo):
n = len(board)
edge = int(math.sqrt(n))
count = 0
for w in get_dictionary(jumbo, True):
if len(w) < min_length:
continue
if find_word(board, w, [], n, edge):
print(w)
count += 1
print 'count: ', count
b = ['a', 'n', 'e', 'r',
's', 'e', 'h', 't',
'm', 'o', 'l', 'i',
'w', 'b', 'c', 'v']
x = list(sys.argv[1])
min_length = int(sys.argv[2])
solve(x, len(sys.argv)>3)