|
|
|
|
@ -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; |
|
|
|
|
|