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!
Jumping On Clouds es uno de los desafíos iniciales con dificultad 'EASY'.
Emma está jugando un nuevo juego móvil que comienza con nubes numeradas consecutivamente. Algunas de las nubes son thunderheads de tormenta y otras son cumulus. Puede saltar a cualquier cumulus con un número igual al número de nubes actuales más 1 o 2. Debe evitar las nubes de tormenta. Determine el número mínimo de saltos que le tomará a Emma saltar desde su posición inicial hasta la última nube. Siempre es posible ganar el juego.
Para cada juego, Emma recibirá una matriz de nubes numeradas 0
si son seguras o 1
si es necesario evitarlas. Por ejemplo, c = [0, 1, 0, 0, 0, 1, 0]
indexado desde 0...6
. El número en cada nube es su índice en la lista, por lo que tendría que evitar nubes con índices 1 y 5. Podría tomar los siguientes dos caminos: 0 -> 2 -> 4 -> 6
o 0 -> 2 -> 3 -> 4 -> 6
. El primer camino toma 3
saltos mientras que el segundo toma 4
.
Una función que devuelve el número mínimo de saltos necesarios, como un número entero.
0 0 1 0 0 1 0
4
function jumpingOnClouds (c ) {
let steps = 0 ,
i = 0 ;
while (i < c .length - 1 ) {
if ((i + 2 < c .length ) && c [i + 2] == 0 ) {
i += 2 ;
} else {
i++ ;
}
steps++ ;
}
return steps;
}
let steps = 0 ,
i = 0 ;
Primero creé dos variables; steps
para llevar la cuenta del número mínimo de saltos requeridos; i
para iterar a través del whileloop;
Me decidí por un whileloop en lugar de un forloop porque para la primera instrucción if ((i + 2 < c.length) && c[i + 2 ] == 0)
, quiero incrementar i += 2
y no solo en 1.
Siempre intento saltar dos nubes. Si no es posible debido a una nube de tormenta, salto 1 nube. Así que hago esto hasta que el puntero está finalmente en la última nube.
Finalmente, finalizo la función devolviendo el conteo final.
Otros idiomas que hablo
def jumpingOnClouds (c )
steps = 0
i = 0
while (i < c .length - 1 ) do
if ((i + 2 < c .length ) && c [i + 2] == 0 )
i += 2
else
i += 1
end
steps += 1
end
steps
end
def jumpingOnClouds (c ):
steps = 0
i = 0
while (i < len (c ) - 1 ):
if ((i + 2 < len (c )) and c [i + 2] == 0 ):
i += 2
else :
i += 1
end
steps += 1
return steps
func jumpingOnClouds (c []int32 ) int32 {
var steps int32
i := 0
for {
if i + 2 < len (c ) && c [i + 2] == 0 {
i += 2
} else {
i++
}
steps++
if i <= len (c ) - 1 {
break
}
}
return steps
}
def jumpingOnClouds (c : Array [Int ]): Int = {
var steps = 0
var i = 0
while (i < c .length - 1 ) {
if ((i + 2 < c .length ) && c (i + 2) == 0 ) {
i += 2
} else {
i += 1
}
steps += 1
}
return steps
static int jumpingOnClouds (int [] c ) {
int steps = 0 ,
i = 0 ;
while (i < c .length - 1 ) {
if ((i + 2 < c .length ) && c [i + 2] == 0 ) {
i += 2 ;
} else {
i += 1 ;
}
steps += 1 ;
}
return steps;
function jumpingOnClouds ($c ) {
$steps = 0 ;
$i = 0 ;
while ($i < count ($c ) - 1 ) {
if (($i + 2 < count ($c )) && $c [$i + 2] == 0 ) {
$i += 2 ;
} else {
$i++ ;
}
$steps++ ;
}
return $steps;
Pensamiento: Prefiero ser un hombre de paradojas que un hombre de prejuicios.