Rastreador de rotas

Neste desafio, a área de trabalho será uma matriz 4x4 contendo três tipos de caracteres:

  • @ Sua posição.
  • - Um espaço vazio.
  • &, #, $ Itens coletáveis.

A partir do seu ponto inicial na grade, você deve traçar uma rota colocando um x em cada espaço visitado, seguindo uma sequência de letras com as direções a serem tomadas:

  • l Esquerda
  • r Direita
  • u Cima
  • d Baixo
input = "luur"
// left, up, up, right

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

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

Quando os movimentos terminarem, você terá uma nova grade com a rota indicada traçada (uma rota feita de caracteres x) e uma série de itens coletados ao longo do caminho.

Dada uma matriz grid e uma string com as direções a serem tomadas input, implemente uma função que retorne um objeto literal contendo a rota traçada como uma nova matriz e os itens coletados como uma string.

Exemplos

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

Observações

  • A posição inicial não deve ser alterada na nova matriz.
  • O x substituirá o símbolo que já estiver presente no espaço visitado.
  • Na string retornada, os itens devem aparecer na ordem em que foram coletados. Cuidado com os espaços vazios: eles não podem ser coletados!
  • Não se preocupe com casos de "out of bounds"; as strings de instruções contêm apenas rotas válidas.
  • As strings de instruções terão comprimentos diferentes.