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!
Jumping On Clouds é um dos desafios iniciais com a dificuldade 'EASY'.
Emma está jogando um novo jogo para celular que começa com nuvens numeradas consecutivamente. Algumas das nuvens são thunderheads e outras são cumulus. Ela pode pular em qualquer nuvem cumulus com um número igual ao número de nuvens atuais mais 1 ou 2. Ela deve evitar as nuvens de tempestade. Determine o número mínimo de saltos que levará Emma para pular de sua posição inicial para a última nuvem. É sempre possível ganhar o jogo.
Para cada jogo, Emma receberá uma matriz de nuvens numeradas 0
se elas forem seguras ou 1
se precisarem ser evitadas. Por exemplo, c = [0, 1, 0, 0, 0, 1, 0]
indexado de 0...6
. O número em cada nuvem é seu índice na lista, então ela teria que evitar as nuvens com índices 1 e 5. Ela poderia seguir os dois caminhos a seguir: 0 -> 2 -> 4 -> 6
ou 0 -> 2 -> 3 - > 4 -> 6
. O primeiro caminho leva 3
saltos enquanto o segundo leva 4
.
Uma função que retorne o número mínimo de saltos requeridos, como um inteiro.
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 ;
Primeiro criei duas variáveis; steps
para manter a contagem do número mínimo de saltos requeridos; i
para iterar o whileloop;
Decidi por um whileloop em vez de um forloop porque, para a primeira instrução if ((i + 2 < c.length) && c[i + 2] == 0)
, quero incrementar i += 2
e não apenas por 1.
Eu sempre tento saltar duas nuvens. Se não for possível por causa da nuvem de tempestade, salto 1 nuvem. Então faço isso até que o ponteiro esteja finalmente na última nuvem.
Por último, finalizo a função retornando a contagem final.
Outras línguas que eu falo
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;
Pensamento: A medida do amor é amar sem medida.