DEV Community

Altencir Junior
Altencir Junior

Posted on

Resolvendo problemas no HackerRank: Subindo um vale!

Olá, seja bem vindo a mais uma etapa do Resolvendo problemas no Hacker-Rank,nessa sessão iremos fazer um algoritmo que irá revelar a contagem de valer percorridos. Vejamos como separar isso.

Couting Valleys -

Nesse caso, teremos uma alpinista que anda por diversos locais, e que salva seus registros de caminhada. Ele tem um meio de salvar que tem como base subidas e descidas.

step =passos
u =subida
d =descida
path =contagemDeSubidaEDescida

Por exemplo, seu último registro foi passado do seguinte modelo:

steps = 8 path =[dduuudd]
Enter fullscreen mode Exit fullscreen mode

Temos também certas regras a seguir nesse caso, com respeito a subida de montanhas e entrada em lagos.

  • Uma montanha é uma sequência de degraus consecutivos acima do nível do mar, começando com um degrau acima do nível do mar e terminando com um degrau abaixo do nível do mar.

  • Um vale é uma sequência de degraus consecutivos abaixo do nível do mar, começando com um degrau abaixo do nível do mar e terminando com um degrau subindo até o nível do mar.

Com isso, vejamos a solução encontrada para esse código:

function countingValleys(steps, path) {
    // Write your code here
//step=passos,u=subida,d=descida,path=contagemDeSubidaEDescida
    var traversedValleyCount = 0;
    var `isInValley` = false;
    var altitude = 0;

    for (let i = 0; i < steps; i++) {
        if (path[i] === "D") {
            altitude--

C;
        } else if (path[i] === "U") {
            altitude++;
        }
        if (altitude < 0 && isInValley === false) {
            isInValley = true;
        } else if (isInValley === true && altitude === 0) {
            traversedValleyCount++;
            isInValley = false;
        }
    }
    return traversedValleyCount;

}
Enter fullscreen mode Exit fullscreen mode

O código acima começa com uma função que guarda stepse path como parâmetros. Logo após isso nós criamos as variáveis traversedValleyCount,isInValley e altitude. Com uma sendo para caso seja um vale sendo atravessad´, averiguar se é um vale e sua altitude.

Com isso, criamos o primeiro laço for que vai iterar o index baseado no número de steps. Se o index de path que guardará o número de subidas e descidas for igual a D, altitude irá diminuir. Caso contrário e for igual a U, irá aumentar. Também temos o caso da altitude for abaixo de 0, ou seja abaixo do nível do mar nesse caso, que seria quando entramos no vale, com isso o isInValley que inicia com valor false será true.

Quando o isInValley for igual true e ser igual a 0, adicionará mais 1, a contagem do traversedValleyCount e o IsInValley voltará a ser false. Após isso, nós retornamos o traversedValleyCount com todos os casos prontos.

O resultado será:

8
UDDDUDUU

input: 1
Enter fullscreen mode Exit fullscreen mode

Com isso concluímos mais um episódio, e nos vemos na próxima!!!

Top comments (0)