Juego de la serpiente

Escribe una función que pueda simular una serpiente que se arrastra.

Texto alternativo

Entrada

  • field — Una matriz rectangular, una lista de listas, compuesta por números que corresponden a: 0 – celda vacía, 1 – comida, 2 – la cabeza de la serpiente.
  • moves — Una lista de tuplas.

Cada tupla representa los siguientes movimientos:

  • (1, 0) — Abajo
  • (0, 1) — Derecha
  • (-1, 0) — Arriba
  • (0, -1) — Izquierda

Salida

La imagen final del campo, que consta de la serpiente como una colección de 2 en ciertas celdas y la comida restante 1 que no se haya comido durante los movimientos de la serpiente.

Reglas

La cabeza de la serpiente se mueve en la dirección especificada por el move proporcionado. Si la cabeza se mueve a una celda vacía, todo el cuerpo se mueve de manera ordenada (la longitud de la serpiente no cambia). Si la cabeza se mueve a una celda con comida, el cuerpo no se mueve, la nueva cabeza ocupa la posición de la comida (la longitud de la serpiente aumenta en uno). Si la cabeza choca contra una pared, entonces la atraviesa y la cabeza reaparece por la pared opuesta (en la misma fila si el movimiento es horizontal, en la misma columna si el movimiento es vertical).

Si la cabeza tiene que moverse hacia su propio cuerpo, sin contar la punta de la cola, la serpiente se muerde a sí misma y sufre una lesión mortal. En este caso, detén la ejecución de la función y devuelve la cadena "Game Over".

La cabeza no puede alcanzar la cola. Se supone que en este juego, cuando la cabeza se mueve, la cola también se mueve y deja libre la celda.

¡La celda de comida solo se puede comer una vez! Si la serpiente se arrastra alrededor y vuelve a pasar por la celda, esta se ha convertido en una celda vacía.

Ejemplos

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]
]

Notas

  • Al inicio del juego, el cuerpo de la serpiente consta únicamente de la cabeza (la longitud total es uno).
  • Después de que la cabeza ejecute la lista de movimientos proporcionada, la serpiente feliz se detiene y descansa. La salida de la función debe mostrar la posición final del cuerpo de la serpiente en el campo.