def try_letters_in_range rack, range, letter_word, letter_board, letter_neighbours
return false if (range.last > SIZE) ||
(range.first > 0 && letter_board.call(range.first - 1) != @empty_field) ||
(range.last < SIZE && letter_board.call(range.last) != @empty_field)
rack = rack.clone
uses_empty_field = overlaps = false
for i in range
letter_in_word = letter_word.call(i)
letter_in_board = letter_board.call(i)
if letter_in_board == @empty_field && rack.include?(letter_in_word)
return false if letter_neighbours.call(i) != [@empty_field, @empty_field]
uses_empty_field = true
rack.delete_first letter_in_word
elsif letter_in_board == letter_in_word
overlaps = true
else
return false
end
end
overlaps and uses_empty_field
end