Write a function that determines whether a string is a valid guess in a Boggle board, as per the rules of Boggle. A Boggle board is a 2D array of individual characters, e.g.:
```python
[ ["I","L","A","W"],
  ["B","N","G","E"],
  ["I","U","A","O"],
  ["A","S","R","L"] ]
```
Valid guesses are strings which can be formed by connecting adjacent cells (horizontally, vertically, or diagonally) without re-using any previously used cells.
For example, in the above board "BINGO", "LINGO", and "ILNBIA" would all be valid guesses, while "BUNGIE", "BINS", and "SINUS" would not.
Your function should take two arguments (a 2D array and a string) and return true or false depending on whether the string is found in the array as per Boggle rules.
Test cases will provide various array and string sizes (squared arrays up to 150x150 and strings up to 150 uppercase letters). You do not have to check whether the string is a real word or not, only if it's a valid guess.
def find_word(board, word, cursor = None):
    if not word:
        return True
    workboard = [row[:] for row in board]
    sy, sx, ey, ex = 0, 0, len(board), len(board[0])
    if cursor:
        cx, cy = cursor
        workboard[cy][cx] = "-"
        sy = max(sy, cy - 1)
        sx = max(sx, cx - 1)
        ey = min(ey, cy + 2)
        ex = min(ex, cx + 2)
    for     y, row  in enumerate(workboard[:ey][sy:]):
        for x, cell in enumerate(      row[:ex][sx:]):
            if cell == word[0] and find_word(workboard, word[1:], (x + sx, y + sy)):
                return True
    return False
def find_word(board, word, cursor = None):
    if not word:
        return True
    workboard = [row[:] for row in board]
    sy, sx, ey, ex = 0, 0, len(board), len(board[0])
    if cursor:
        cx, cy = cursor
        workboard[cy][cx] = "-"
        sy = max(sy, cy - 1)
        sx = max(sx, cx - 1)
        ey = min(ey, cy + 2)
        ex = min(ex, cx + 2)
    for     y, row  in enumerate(workboard[:ey][sy:]):
        for x, cell in enumerate(      row[:ex][sx:]):
            if cell == word[0] and find_word(workboard, word[1:], (x + sx, y + sy)):
                return True
    return False