def split_word(row):
word = ""
list_word = []
for letter in row:
if letter:
word += letter
else:
if len(word) > 1:
list_word.append(word)
word = ""
if len(word) > 1:
list_word.append(word)
return list_word
def get_all_words(board):
valid = []
invalid = []
for row in board:
for word in split_word(row):
if is_valid(word):
valid.append(word)
else:
invalid.append(word)
for i in [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]:
for word in split_word(sum(board, [])[i::15]):
if is_valid(word):
valid.append(word)
else:
invalid.append(word)
return [sorted(valid),sorted(invalid)]
def get_play(board, new_board):
tiles = ""
down = 0
location = []
for row in [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]:
for col in [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]:
letter = new_board[row][col]
if letter != board[row][col]:
tiles += letter
location.append([row,col])
if len(location) > 1:
if location[0][1] == location[1][1]:
down = 1
return location[0] + [down, tiles]
def play(row,col,down,tiles,board):
scores = 0
word_in_board = get_all_words(board)[0]
word_in_new_board, invalid_words = get_all_words(place_tiles(row, col, down, tiles, board)[1])
if invalid_words:
return -1
for word in word_in_new_board:
if word not in word_in_board:
for letter in word:
scores += get_value(letter)
else:
word_in_board.remove(word)
if scores > 0:
if len(tiles) >= 7:
scores += 50
return scores
return -1
def best_play(tiles,board):
top_score = 0
location = [-1,-1,-1,-1]
for row in [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]:
for col in [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]:
for down in [0,1]:
score = play(row,col,down,tiles,board)
if score > top_score:
top_score = score
location = [score, row, col, down]
return location
|