Estoy publicando mis soluciones a los desafíos de HackerRank como una forma de mejorar mi aprendizaje, reforzar mi conocimiento y establecer una comprensión de los conceptos cubiertos. Si ayudo a alguien compartiendo en el camino, ¡aún mejor!
Counting Valleys es uno de los desafíos iniciales con dificultad 'EASY'.
Gary es un ávido escalador. Realiza un seguimiento meticuloso de sus caminatas, prestando mucha atención a los pequeños detalles como la topografía. Durante su última caminata, dio exactamente n
pasos. Para cada paso que dio, anotó si era un paso hacia arriba, U
, o hacia abajo, D
. Las caminatas de Gary comienzan y terminan al nivel del mar y cada paso hacia arriba o hacia abajo representa un cambio de 1 unidad de altitud. Definimos los términos siguientes:
Dada la secuencia de Gary de subir y bajar los escalones durante su última caminata, encuentra e imprime el número de valles que caminó. Por ejemplo, si el camino de Gary es s = [DDUUUUDD]
, primero entrará en un valle que tiene 2 unidades de profundidad. Luego sube una montaña de 2 unidades de altura. Finalmente, vuelve al nivel del mar y termina su caminata.
Una función que debería devolver un número entero con el número de valles recorridos 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 ;
Primero creé tres variables; level
para rastrear la altitud; valleys
para llevar la cuenta del número de valles que ha atravesado Gary; i
para iterar el forloop;
Creé un loop for
que seguirá la secuencia de pasos que siguió Gary. for (i in s) {
La condición ternaria if
comprueba si el paso de Gary estaba arriba U
: s.charAt(i) === 'U' ?
Si lo estaba, incrementa el conteo: level++
Si no, disminuya el conteo. level--
Luego compruebo que Gary está al nivel del mar level === 0
y que el paso estaba arriba && s.charAt(i) === 'U'
, en este caso que representa que acaba de escalar un valle. valleys++
Como al inicio del desafío nos informan que Gary inicia y finaliza sus caminatas al nivel del mar, podemos ignorar si subió una montaña y enfocarnos solo en el valle.
Finalmente, finalizo la función devolviendo el conteo final.
Otros idiomas que hablo
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;
}
Pensamiento: Podemos juzgar el corazón de una persona por la forma en que trata a los animales.