ALLAN AVELAR
Boa Tarde<!-- --> <username class="jsx-41964832"></username><icon class="jsx-3111688975"><img alt="🍜" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAABiM0N1AAAAS1BMVEVHcEwAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAADoEiS7kWf/1nnrLDy1jWT5vsP40HXW1tbGxsYZGRlhYWGcnJzp6elKSkrDpFyEFbgAAAAACnRSTlMAGv//s3SKS/LOykLjcwAAAZRJREFUWMPtmOuOgyAQhRVRwMtWbtr3f9IVF2On9QKjNZvdnoT4Q/0CBzIzTJJ8hBKjnHhxyvCcggAVGAZB6QrQ/T6PQ6C6Hkb780SDqkF1PY9tXQE6bWlObTuPQx6FawP0Naiq5rGtqzz6g6AJBkHIcPQB7Yv7wHYYRKcjcBTEzgIl+VmghImTQH7nPqCnnRL8OTiEhBEucoBJxcJHgfFIpA+gJU5wYBMvJxAJIjmYUN9lCHUGTMn5LDOUpHMcbHaGFDgep4JKpN4H+n0eddmtaW7uVdwTgPgIasqycR9EPTtwjtzJVjiQBCfbJSCLW5odfqXgFmNwXhtw63GZTONAeviVwSytMBwFvD6wNgMs8lla4oIIAVfMMbTFg3oYaacp2ViOfZmQr2VUvNPAoTEhuY3TUTZJt/U8XayKdMSclF5Y2JyTbJQ/JF+/7vdBy5P9VkvA58l+d33KkPX5jD75QkIbK1fyZSet0b6A2Gh2pDS8a0DTgPIxoHLY7708tGpWq6LQFg4rqOBrlRUtDjSC/re+Abd+NlUf6yOQAAAAAElFTkSuQmCC" class="jsx-3111688975"/></icon>Seja bem vindo ao meu app!Instalar como aplicativo PWAInstalar em seu dispositivoAcesso RestritoEntrar / RegistrarBackoffice System (BOS)Dados 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💰EASYBANK💳EASYPAY💼EASYWORK👨‍🎓MASTERCLASS📲YOU2APP💘COOLPIDO🎁BRXInsightsHackerRank5Sock MerchantCounting ValleysRepeated StringJumping On CloudsLeft Rotation
EntrarRegistrarEsqueceu sua senha?EntrarNão tem uma conta? Crie uma agora!
🕓 Outubro 21, 2018🙇 5 minutos de leitura

Warm-up Challenges ⚡ Counting Valleys

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.

Counting Valleys é um dos desafios iniciais com a dificuldade 'EASY'.


Qual o desafio?

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:

  • Uma montanha é uma sequência de degraus consecutivos acima do nível do mar, começando com uma subida do nível do mar e terminando com um degrau até o nível do mar.
  • Um vale é uma sequência de degraus consecutivos abaixo do nível do mar, começando com um degrau abaixo do nível do mar e terminando com um passo até o nível do mar.

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.

O que temos que fazer?

Uma função que deve retornar um inteiro com o número de vales percorridos por Gary.

Parâmetros
  • n = o número de passos que Gary percorreu
  • s = uma string descrevendo seu caminho

Sample Input

8
UDDDUDUU

Sample Output

1

Solução

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

Lógica

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;

for in

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


🕵Soluções Extras

Outras Linguas que eu falo


💎 Ruby

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

🐍 PYTHON 2 & 3

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

golang GOLANG

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
}

scala SCALA

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

javaJAVA 7 & 8

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

php PHP

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;
}
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 / 🏭 💰 EASY BANK / ⏳ 💳 EASY PAY / ⏳ 💼 EASY WORK / ⏳ 👨‍🎓 MASTER CLASS / ⏳ 📲 YOU 2 APP / 🏭 💘 COOLPIDO / ⏳ 🎁 BRX / 🏭
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...