Jogo da Cobra
Escreva uma função capaz de simular uma cobra rastejando.

Entrada
field— Uma matriz retangular, uma lista de listas, composta por números correspondentes a: 0 – célula vazia, 1 – comida, 2 – a cabeça da cobra.moves— Uma lista de tuplas.
Cada tupla representa os seguintes movimentos:
(1, 0)— Para baixo(0, 1)— Para a direita(-1, 0)— Para cima(0, -1)— Para a esquerda
Saída
A imagem final do campo, que consiste na cobra como uma coleção de 2 em determinadas células e na comida restante 1 que não foi comida durante os movimentos da cobra.
Regras
A cabeça da cobra se move na direção especificada pelo move fornecido. Se a cabeça se mover para uma célula vazia, todo o corpo se moverá de maneira ordenada (o comprimento da cobra não muda). Se a cabeça se mover para uma célula com comida, o corpo não se moverá, e a nova cabeça ocupará a posição da comida (o comprimento da cobra aumentará em um). Se a cabeça bater em uma parede, ela a atravessa e a cabeça reaparece pela parede oposta (na mesma linha se o movimento for horizontal, na mesma coluna se o movimento for vertical).
Se a cabeça tiver que se mover para o próprio corpo, excluindo a ponta da cauda, a cobra morderá a si mesma e sofrerá um ferimento mortal. Nesse caso, interrompa a execução da função e retorne a string "Game Over".
A cabeça não pode alcançar a cauda. Considera-se, neste jogo, que, quando a cabeça se move, a cauda também se move e desocupa a célula.
A célula de comida só pode ser comida uma vez! Se a cobra rastejar por aí e passar novamente pela célula, essa célula terá se tornado uma célula vazia.
Exemplos
f = [
[0, 0, 0, 0, 0, 1],
[0, 2, 0, 0, 1, 0],
[0, 0, 0, 1, 0, 0],
[0, 1, 0, 0, 0, 0]
]
m = [
(0, 1), (0, 1), (0, 1), (-1, 0), (0, 1), (0, 1), (0, 1), (1, 0),
(1, 0), (1, 0), (0, 1), (0, 1), (-1, 0), (0, 1), (-1, 0)
]
snake(f, m) ➞ [
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 2, 0],
[0, 0, 0, 2, 2, 0],
[0, 0, 2, 2, 0, 0]
]Observações
- No início do jogo, o corpo da cobra consiste apenas na cabeça (o comprimento total é um).
- Depois que a cabeça executar a lista de movimentos fornecida, a cobra feliz para e descansa. A saída da função deve exibir a posição final do corpo da cobra no campo.