Trazador de rutas

En este desafío, el área de trabajo será una matriz de 4x4 que contiene tres tipos de caracteres:

  • @ Tu posición.
  • - Un espacio vacío.
  • &, #, $ Objetos coleccionables.

Desde tu punto de partida en la cuadrícula, debes trazar una ruta colocando una x en cada espacio visitado, siguiendo una secuencia de letras con las direcciones que debes tomar:

  • l Izquierda
  • r Derecha
  • u Arriba
  • d Abajo
input = "luur"
// left, up, up, right

grid = [
["-", "-", "-", "#"]
["-", "-", "$", "-"]
["-", "-", "-", "@"]
["-", "&", "-", "-"] ]

result = { route = [
["-", "-", "x", "x"],
["-", "-", "x", "-"],
["-", "-", "x", "@"],
["-", "&", "-", "-"] ],
items: "$#" }

Cuando termines los movimientos, tendrás una nueva cuadrícula con la ruta indicada trazada (una ruta hecha de caracteres x) y una serie de objetos recogidos durante el recorrido.

Dadas una matriz grid y una cadena con las direcciones que debes tomar input, implementa una función que devuelva un objeto literal que contenga la ruta trazada como una nueva matriz y los objetos recogidos como una cadena.

Ejemplos

function routeTracer([
  ["-", "#", "-", "-"],
  ["$", "#", "@", "&"],
  ["-", "#", "$", "&"],
  ["$", "-", "&", "-"]
], "lddr",) ➞ {
  route: [
 ["-", "#", "-", "-"],
  ["$", "x", "@", "&"],
  ["-", "x", "$", "&"],
  ["$", "x", "x", "-"]
  ],
  items: "##&"
}

Notas

  • La posición inicial no debe cambiarse en la nueva matriz.
  • La x sobrescribirá el símbolo que ya esté presente en el espacio visitado.
  • En la cadena devuelta, los objetos deben aparecer en el orden en que los recogiste. Cuidado con los espacios vacíos: ¡no se pueden recoger!
  • No te preocupes por los casos "out of bounds"; las cadenas de instrucciones solo contienen rutas válidas.
  • Las cadenas de instrucciones tendrán diferentes longitudes.