Encontre a palavra

Você recebe uma grade retangular de letras maiúsculas. Dentro dessa grade, uma palavra-alvo aparece determinado número de vezes. A palavra pode estar posicionada horizontalmente da esquerda para a direita ou da direita para a esquerda; verticalmente de baixo para cima ou de cima para baixo; e diagonalmente da esquerda para a direita para baixo, da direita para a esquerda para baixo, da direita para a esquerda para cima ou da esquerda para a direita para cima.

Escreva uma função que receba dois parâmetros:

  1. A grade retangular de letras maiúsculas.
  2. A palavra-alvo.

Sua função deve retornar uma tupla (count, grid), em que count é o número total de ocorrências da palavra-alvo e grid é a grade de entrada com cada ocorrência da palavra-alvo em letras minúsculas.

Exemplos

count_word([
  ["I", "W", "I", "S", "H"],
  ["Z", "H", "S", "I", "W"],
  ["R", "S", "A", "D", "I"],
  ["Z", "I", "R", "E", "S"],
  ["J", "W", "K", "F", "H"]
], "WISH") ➞ (4, [
  ["I", "w", "i", "s", "h"],
  ["Z", "h", "s", "i", "w"],
  ["R", "s", "A", "D", "i"],
  ["Z", "i", "R", "E", "s"],
  ["J", "w", "K", "F", "h"]
 ])

count_word([
  ["M", "I", "W", "S", "W", "I", "I", "M"],
  ["W", "M", "I", "W", "W", "S", "M", "I"],
  ["I", "S", "S", "I", "M", "I", "S", "W"],
  ["S", "W", "I", "M", "W", "M", "W", "S"],
  ["I", "I", "W", "M", "I", "W", "I", "S"],
  ["I", "M", "I", "S", "M", "S", "M", "W"],
  ["W", "W", "S", "M", "W", "I", "S", "I"],
  ["S", "I", "M", "M", "I", "W", "S", "M"]
], "SWIM") ➞ (9, [
  ["m", "i", "w", "s", "W", "I", "I", "m"],
  ["W", "M", "I", "w", "W", "S", "M", "i"],
  ["I", "s", "S", "i", "M", "I", "s", "w"],
  ["s", "w", "i", "m", "W", "M", "w", "s"],
  ["I", "i", "W", "m", "I", "W", "i", "s"],
  ["I", "m", "i", "S", "M", "S", "m", "w"],
  ["W", "w", "S", "M", "W", "I", "S", "i"],
  ["s", "I", "M", "m", "i", "w", "s", "m"]
])

Observações

As diagonais podem ser quaisquer diagonais nas quais a palavra-alvo caiba, não apenas a diagonal principal. A palavra-alvo não será um palíndromo.