Estou postando sobre as minhas respostas aos desafios do HackerRank como forma de melhorar meu aprendizado, reforçar meu conhecimento e estabelecer uma compreensão dos conceitos abordados. Se eu ajudar alguém compartilhando ao longo do caminho, melhor ainda!
Counting Valleys é um dos desafios iniciais com a dificuldade 'EASY'.
Gary é um ávido alpinista. Ele rastreia suas caminhadas meticulosamente, prestando muita atenção a pequenos detalhes como topografia. Durante sua última caminhada ele tomou exatamente n
passos. Para cada passo que dava, ele notou se era uma subida, U
, ou uma descida, D
etapa. As caminhadas de Gary começam e terminam ao nível do mar e cada passo para cima ou para baixo representa uma mudança de 1 unidade na altitude. Nós definimos os seguintes termos:
Dada a seqüência de Gary de subir e descer os degraus durante sua última caminhada, encontre e imprima o número de vales que ele percorreu. Por exemplo, se o caminho de Gary for s = [DDUUUUDD]
, ele primeiro entrará em um vale com 2 unidades de profundidade. Então ele sobe em uma montanha de 2 unidades de altura. Finalmente, ele retorna ao nível do mar e termina sua caminhada.
Uma função que deve retornar um inteiro com o número de vales percorridos por Gary.
8
UDDDUDUU
1
function countingValleys (n , s ) {
let level = 0 ,
valleys = 0 ,
i = 0 ;
for (i in s ) {
s .charAt (i) === 'U' ? level++ : level-- ;
level === 0 && s .charAt (i) === 'U' ? valleys++ : 0 ;
}
return valleys;
}
let level = 0 ,
valleys = 0 ,
i = 0 ;
Primeiro criei três variáveis; level
para acompanhar a altitude; valleys
para manter a contagem do número de vales que Gary percorreu; i
para iterar o forloop;
Criei um loop for
que percorrerá a sequência de degraus que Gary percorreu. for (i in s) {
A condição ternária if
verifica se o passo de Gary foi para cima U
: s.charAt(i) === 'U' ?
Se foi, incremente a contagem: level++
Se não, decremente a contagem. level--
Em seguida, verifico se Gary está no nível do mar level === 0
e se o passo foi para cima && s.charAt(i) === 'U'
, nesse caso representando que ele acaba de subir um vale. valleys++
Como no início do desafio nos é informado que o Gary começa e termina suas caminhas ao nível do mar, podemos ignorar saber se ele subiu uma montanha e focar apenas no vale.
Por último, finalizo a função retornando a contagem final.
Outras línguas que eu falo
def countingValleys (n , s )
level = 0
valleys = 0
s .each { | i |
i == 'U' ? level += 1 : level -= 1
level == 0 && i == 'U' ? valleys += 1 : 0
}
valleys
end
def countingValleys (n , s ):
level = 0
valleys = 0
for i in range(n ):
if (s [i] == 'U' ):
level += 1
else :
level -= 1
if (level == 0 and s [i] == 'U' ):
valleys += 1
return valleys
func countingValleys (n int32 , s string ) int32 {
var level, valleys int32
for _, i := range s {
if i == 'U' {
level++
} else {
level--
}
if level == 0 && i == 'U' {
valleys++
}
}
return valleys
}
def countingValleys (n : Int , s : String ): Int = {
var level = 0
var valleys = 0
s .foreach (el => {
if (el == 'U' ) {
level += 1
} else {
level -= 1
}
if (level == 0 && el == 'U' ) {
valleys += 1
}
})
return valleys;
}
static int countingValleys (int n , String s ) {
int level = 0 ,
valleys = 0 ;
for (int i = 0 ; i < n ; i++ ) {
if (s .charAt (i) == 'U' )
level++ ;
else
level-- ;
if (level == 0 && s .charAt (i) == 'U' )
valleys++ ;
}
return valleys;
}
function countingValleys ($n , $s ) {
$level = 0 ;
$count = 0 ;
for ($i = 0 ; $i < $n ; $i++ ) {
$s [$i] == 'U' ? $level++ : $level-- ;
$level == 0 && $s [$i] == 'U' ? $valleys++ : 0 ;
}
return $valleys;
}
Pensamento: Geralmente aqueles que sabem pouco falam muito e aqueles que sabem muito falam pouco.