DEV Community

Altencir Junior
Altencir Junior

Posted on

Resolvendo problemas no HackerRank: Lados do mapa

Olá, seja bem vindo a mais um Resolvendo problemas no HackerRank: No caso de hoje, você tem um mapa cheio de cavidades. Vejamos mais informações com a explicação e sua resolução.

cavityMap -

Você recebe um mapa quadrado como uma matriz de strings inteiras. Cada célula do mapa tem um valor que denota sua profundidade. Chamaremos uma célula do mapa de cavidade se e somente se esta célula não estiver na borda do mapa e cada célula adjacente a ela tiver profundidade estritamente menor. Duas células são adjacentes se tiverem um lado ou aresta comum.

Encontre todas as cavidades no mapa e substitua suas profundidades pelo caractere maiúsculo X .

A grade é reorganizada para maior clareza:

989
191
111
Retornar:

989
1X1
111

  • Nosso objetivo é:devolver a string modificada.

Vejamos o código:

function cavityMap(grid) {
    // Write your code here
  let newgrid=grid.map((item)=>item.split(""))

    for(let i=1;i<grid.length-1;i++){
        for(let j=1;j<grid.length-1;j++){
            let ele=grid[i][j]
            if(grid[i-1][j]<ele&&grid[i][j-1]<ele&&grid[i+1][j]<ele&&grid[i][j+1]<ele){

                newgrid[i][j]='X'
            }
        }
    }
    return newgrid.map((item)=>item.join(""));
}
Enter fullscreen mode Exit fullscreen mode

let newgrid = grid.map((item) => item.split("")): Essa linha cria uma nova matriz chamada newgrid usando o método map. Para cada elemento item da matriz grid, é aplicado o método split(""), que divide a string item em um array de caracteres. Isso é feito para permitir a modificação individual dos caracteres posteriormente.

O código então prossegue para um loop aninhado for, que percorre a matriz grid (ou seja, as linhas e colunas). No entanto, observe que o loop vai de 1 a grid.length-1 para evitar acessar elementos fora dos limites da matriz.

Dentro do loop, a variável ele é atribuída ao elemento atual da matriz grid na posição [i][j].

A condição if verifica se o elemento atual é maior que os elementos vizinhos na matriz grid. Se todos os elementos vizinhos (acima, abaixo, à esquerda e à direita) forem menores que o elemento atual, significa que o elemento atual está em uma "cavidade" na matriz.

Se a condição do if for verdadeira, a matriz newgrid é atualizada na posição [i][j], atribuindo o caractere 'X' à mesma posição. Isso indica que o elemento original na posição [i][j] foi substituído por um 'X' para representar uma cavidade.

Depois de percorrer todos os elementos da matriz grid e atualizar a matriz newgrid conforme necessário, a função finaliza.

return newgrid.map((item) => item.join("")): Antes de retornar a matriz newgrid, a função usa o método map novamente para percorrer cada elemento da matriz newgrid e usa join("") para converter o array de caracteres de cada elemento de volta para uma string. Isso é feito para que a matriz final retornada seja composta de strings em vez de arrays de caracteres.

O resultado é:

4
1112
1912
1892
1234

input: 1112
Enter fullscreen mode Exit fullscreen mode

Assim, concluímos mais um Resolvendo problemas no HackerRank: até a próxima.

Top comments (0)