Cintas transportadoras, túneles de teletransporte

En este desafío, debes trabajar con una matriz que se desplaza de izquierda a derecha una cantidad determinada de veces, desplazando sus elementos como en una cinta transportadora. Al final del último arreglo dentro de la matriz, hay un túnel de teletransporte. El túnel de teletransporte hace que los elementos expulsados por los desplazamientos aparezcan al principio de la matriz, en el mismo orden en que estaban antes del desplazamiento. Observa el siguiente ejemplo:

# Before the movement.
mtx = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
n = 2

# After the movement (2 shifts to the right).
mtx = [[8, 9, 1], [2, 3, 4], [5, 6, 7]]

# Shifting 2 times to the right, "8" and "9" are pushed through the warp tunnel.
# The warped elements appear at the start.

Dada una matriz mtx y un entero n, implementa una función que devuelva la misma matriz con sus elementos desplazados n veces.

Ejemplos

warp_tunnel([[1, 2, 3], [4, 5, 6], [7, 8, 9]], 2) ➞ [[8, 9, 1], [2, 3, 4], [5, 6, 7]]

warp_tunnel([[1, 2, 3], [4, 5, 6], [7, 8, 9]], 8) ➞ [[2, 3, 4], [5, 6, 7], [8, 9, 1]]

warp_tunnel([[1, 2, 3], [4, 5, 6], [7, 8, 9]], 9) ➞ [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

warp_tunnel([[1, 2, 3], [4, 5, 6], [7, 8, 9]], 18) ➞ [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Notas

  • Las matrices dadas son regulares (cada arreglo tiene la misma cantidad de elementos) y sus longitudes y cantidad de arreglos pueden variar.
  • La matriz devuelta debe tener las mismas dimensiones que la original.
  • El valor dado de n puede ser mayor que la cantidad total de elementos dentro de la matriz (consulta el ejemplo #4). Cada vez que completes un ciclo de desplazamiento (de modo que cada elemento vuelva a su posición original, como en el ejemplo #3), debes comenzar de nuevo.