ALLAN AVELAR
Boa Noite<!-- --> <username class="jsx-4090757678"></username><icon class="jsx-3111688975"><img alt="🍻" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAABiM0N1AAAAclBMVEVHcEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwAAAAAAAAAAAD////rowDz8/MAAADUjAD/uQHl5eX9+e6oqKjs7Oz13qwoKCj+uADLy8s4ODjtrh71xVSPj4/lsUXy7N3ZmiBSUlJxcXHzzXblu2jlnQBCejIZAAAADHRSTlMACjIh2H/BoPb7PVsNNA6jAAAC5klEQVRYw+2YW5uCIBCGs/XYekSgzGNb//83LiAqwmDZ7mXfTerz+DYzMNNHh8NHH6n6+vZ8N4yyLApd3/v+epPiuRlTlAlF/NP19rOOQQYpCnaivCizKPJ2YBxfvnX9wRUiaUpQhX+u8qH/ct0k59wihiCMIz9Qe17qNdVvq26iPCFmr6crkZTgEMg2OFrqLJJCCkYBoitYN8cW0BlBFH6HbrxuaRynq7pBJL59sAYh4zVhgLWIrJsLkPhzolGkYkiiblEAg+DEYlhEJHi0gIiZWWxTytMzQ4pkanpMsV2YV2mr2GpmZAOU8iz0bS22I19+fck2QLEJmtrs2r+2ZFbQPD1q+uKaTalFZnucMUIoSep7r6ZGdhV7bA8kQEmSDw9K++chieXPAkdfsQUklNAnoPJqNhy/RzqonqoFc2gxzxMTlGUKKOEQOgwUioYWRcG+B5/XbWIHDXk+aIye3rukECA2qNZtAoNYvXt+tU4oEZpA6XrlYFDT950OKnQQWW1KGDRdiUjqmuqgcezsBNVsp/4LiN+VrNL/AmrKsvkTiEeyvP4HEI9kJ2jVIvPV+vVNENi074C0MfI+SB1sfwIto3YPCGiRxWPl09uvgvRx68iY8lmvgZD5azv60IdKyp+BjMG27KZyyA1diuKig/gzYNQqNqLsDFBykRwFlDC21W2J/c1Gj4bqkllLbFwyHgc0Nojbu5I+OpHi0D1oGTfLuyqnsTrSaOw43eilZZ0AqkvAiywd14pGme0Vt6EoLhuT05SxFcTXP6yQIQalGqqhsDuSB6NIOHYTlIqfxHsnUqy7O6sbD9YKOnijR9JQGLJbfFMbpsbo3fDWYpFihdtbmLWamZDmogUd5NY5K6ygw0AVwjZ76jgfIuHU0OjXt45bpwA4Cl0xUc0lwaM3enIadE5eIA95fuCpdeNWcKwb3K3vnU93nU7tdcv84xtn+KNetzA4vfuvwlI3N/BOzudvlo9W+gW3La50sq+F+QAAAABJRU5ErkJggg==" class="jsx-3111688975"/></icon>Seja bem vindo ao meu app!Instalar como aplicativo PWAInstalar em seu dispositivoAcesso RestritoEntrar / RegistrarBackoffice System (BOS)MyBankDados CadastraisProjetos / ServiçosDownloads / ProdutosCréditos / ComprasChromecast AppsEspaço de AcessosNotificaçõesDesconectarConteúdos disponíveisHomeSobre Mim3IntroduçãoResumo ProfissionalMetodologia de TrabalhoPortfólioPrincipais ProjetosFlex Network5IntroduçãoMineração PúblicaFlash TradingFlex TradingTutoriaisLaboratório7👨‍🎓MASTERCLASS🔮LOGOTYPES💰EASYBANK💘COOLPIDO💼EASYWORK💳EASYPAY📲YOU2APP🎁BRX💻MAINOSProdutos2🔮LOGOTYPES💰MY BANKInsightsHackerRank5Sock MerchantCounting ValleysRepeated StringJumping On CloudsLeft Rotation
EntrarRegistrarEsqueceu sua senha?EntrarNão tem uma conta? Crie uma agora!
🕓 Outubro 20, 2018🏎 5 minutos de leitura

Warm-up Challenges ⚡ Jumping On Clouds

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 ao longo do caminho, melhor ainda! Não afirmo que as respostas são as melhores ou mais eficientes, a menos que seja indicado o contrário. Elas são simplesmente as respostas que meu cérebro e minha intuição criaram para resolver o problema naquele momento.

Jumping On Clouds é um dos desafios iniciais com a dificuldade 'EASY'.


Qual o desafio?

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.

O que temos que fazer?

Uma função que retorne o número mínimo de saltos requeridos, como um inteiro.

Parâmetros
  • c = uma matriz de inteiros binários

Sample Input

7
0 0 1 0 0 1 0

Sample Output

4

Solução

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;
}

Lógica

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;

while

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. 🖖


🕵Soluções Extras

Outras Linguas que eu falo


💎 Ruby

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

🐍 PYTHON 2 & 3

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

golang GOLANG

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
}

scala SCALA

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

javaJAVA 7 & 8

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;

php PHP

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;
Não afirmo que essas respostas são as melhores ou mais eficientes, elas são simplesmente as que meu cérebro e minha intuição criaram para resolver o problema naquele momento.
Sobre Mim Resumo Profissional Metodologia de Trabalho
Laboratório 💱 FLEX NETWORK | 🏭 👨‍🎓 MASTER CLASS | ⏳ 💰 EASY BANK | ⏳ 💼 EASYWORK | ⏳ 💳 EASY PAY | ⏳ 🎁 LOGOTYPES | 🏭 💘 COOLPIDO | ⏳ 📲 YOU 2 APP | 🏭 💻 MAINOS | 🏭 🎁 BRX | 🏭
Produtos 🔮 LOGOTYPES | 🏭 💰 MY BANK | 🏭
PRINCIPAIS PROJETOS
Insights HACKERRANK #sockMerchant #countingValleys #repeatedString #jumpingOnClouds #leftRotation
Fale Comigo
This PWA was handcrafted with ❤ using Reactjs ➕ Nextjs and deployed on Github 🚀
Conectando-se ao Chrome Cast...