ALLAN AVELARTechnology Solutions
🍰Boa Tarde,<username class="jsx-1036735364">Visitante</username>!Seja bem vindo ao meu website!Progressive Web App (PWA)Instalar em seu dispositivoChromecast Controlsstatus: not playing or showingVolumeDown50%VolumeUpPlayPausestoppedStopResetFullscreenExpandAcesso RestritoConectar / RegistrarEntre com suas credenciais de acessoEspaço de AcessosSolicite seu Código de AcessoDados CadastraisSeus dados pessoais e de acessoProjetos / ServiçosSeu histórico de contrataçõesProdutos / DownloadsSeu histórico de aquisiçõesChromecast AppsSeus contratos de transmissãoCréditos / ComprasSeu saldo e histórico de créditosEspaço de AcessosSeus acessos à conteúdos restritosNotificaçõesNotificações habilitadas para vocêDesconectarDesconectar seu usuárioConteúdos disponíveisHomeSobre Mim6Resumo PessoalUm pouco de como tudo começouResumo ProfissionalUm pouco da minha tragetóriaMetodologia de TrabalhoComo eu faço acontecerMemórias PessoaisConteúdo RestritoCurriculum VitaeConteúdo RestritoViagens & FotosConteúdo RestritoÁreas de Atuação10Todos os meus serviçosResumo de todas as áreasCTO as a ServiceTenha um C-Level de meio períodoCorporate ArchitectureAgilidade e tecnologia como filosofiaSoftware & TechnologyEm desenvolvimentoFrontend DevelopmentEm desenvolvimentoBackend DevelopmentEm desenvolvimentoStrategy & ConsultingEm desenvolvimentoPlatform & DevSecOpsEm desenvolvimentoCustomer ExperienceEm desenvolvimentoAgile CultureEm desenvolvimentoHub de Inovação6Cultura de InovaçãoVantagens e como implementarDistributed LT & BlockchainEm desenvolvimentoData Science & AnalyticsEm desenvolvimentoCybersecurity PlatformEm desenvolvimentoIntelligent AutomationEm desenvolvimentoAI & Machine LearningEm desenvolvimentoCursos & Treinamentos9Distributed LT & BlockchainEm desenvolvimentoCybersecurity PlatformEm desenvolvimentoIntelligent AutomationEm desenvolvimentoFrontend DevelopmentEm desenvolvimentoBackend DevelopmentEm desenvolvimentoPlatform & DevSecOpsEm desenvolvimentoAI & Machine LearningEm desenvolvimentoProgressive Web AppsEm desenvolvimentoAgile CultureEm desenvolvimentoFale ComigoPROJETOS REALIZADOSTodos os meus projetosResumo de todas as áreasInstituições Financeiras3Banco Santander TottaConteúdo RestritoBanco Santander BrasilConteúdo RestritoBanco Safra S.AConteúdo RestritoWeb3 / Blockchain15Bitcoin (BTC)Conteúdo RestritoEthereum VM (ETH)Conteúdo RestritoRipple (XRP)Conteúdo RestritoHyperledger.orgConteúdo RestritoInternet ComputerConteúdo RestritoStarknet (Cairo)Conteúdo RestritoPolkadot (DOT)Conteúdo RestritoDeFi DashboardsConteúdo RestritoToken MarketplacesConteúdo RestritoCrypto CheckoutsConteúdo RestritoCold / Hot WalletsConteúdo RestritoWallet ConnectorsConteúdo RestritoNon Fungible Tokens (NFT)Conteúdo RestritoDescentralized Identities (DID)Conteúdo RestritoDescentralized Organizations (DAO)Conteúdo RestritoProjetos Antigos29TIM | Unidade de Resposta AudívelAdobe Flex, Actionscript 3, Java, SpringACS | Follow EnergyAngularjs, HTML5, CSS3, C#, REST APIACS | Gateway CE50Angularjs, HTML5, CSS3, C, C#, LUASKY | Selinho de NatalActionscript 3, .NET, REST API, JSONIntel | Futuro de PresenteActionscript 3, .NET, REST API, JSONNestlé | Baú de DiversõesAS 3, .NET, REST, Facebook OpengraphMarlboro | Red RacingAdobe Flash, Actionscript 3, JSONHP | Cartucho PirataAdobe Flash, Actionscript 3, REST APIHP | Youtube StoreAdobe Flash, AS3, YouTube Data APICasas Bahia | BahianinhoActionscript 3, .NET, REST API, JSONAdria | TortinhasAdobe Flash, Actionscript 3, PHPUniverso Online | UOL FinanceActionscript 3, REST API, JSONUniverso Online | UOL MaisActionscript 3, REST API, JSONChevrolet | CaptivaActionscript 3, PHP, MYSQLGafisa | Edifício ColaborativoAdobe Flash, Actionscript 3Pão de Açucar | Sommeliers ClubAdobe Flash, Actionscript 3Pão de Açucar | Desafio ColeçõesAdobe Flash, Actionscript 3Antarctica | Circuito OriginalMacromedia Flash, Actionscript 2, XMLNestlé | Nescau 2.0Macromedia Flash, Actionscript 2, XMLSchin RefrigerantesActionscript 2, FMS 2, PHP, MYSQLMercedes-Benz | SLK 2005Actionscript 2, XMLMercedes-Benz | Classe CActionscript 2, XMLMercedes-Benz | Classe AActionscript 2, XMLMercedes Benz | SprinterActionscript 2, XMLMercedes Benz | Motores EletrônicosActionscript 2, XMLBanda NX ZeroMacromedia Flash, Actionscript 2Lew´lara TBWAActionscript 2, PHP, MYSQLMaison CriolaActionscript 2, PHP, MYSQLBondage MusicActionscript 2, PHP, MYSQLBlog PostsHackerRank5Sock MerchantWarm-Up ChallengesCounting ValleysWarm-Up ChallengesRepeated StringWarm-Up ChallengesJumping On CloudsWarm-Up ChallengesLeft RotationWarm-Up ChallengesLegal TermsTermos e CondiçõesPolítica de PrivacidadeIsenção de Responsabilidade
Usuário / SenhaBlockchainEsqueceu sua senha?EntrarNão tem uma conta? Veja uma demostração!
🚀 Fevereiro 25, 2018♻ Outubro 21, 2018reading 9 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 compartilhando ao longo do caminho, melhor ainda!

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 línguas 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;
}

Pensamento: Geralmente aqueles que sabem pouco falam muito e aqueles que sabem muito falam pouco.
Jean-Jacques Rousseau

💡 Últimos Insights:

Não afirmo que essas respostas são as melhores ou mais eficientes, elas são simplesmente criações da minha mente para resolver o problema naquele momento. Provavelmente hoje eu faria diferente...
Sobre MimResumo ProfissionalMetodologia de TrabalhoMemórias PessoaisCurriculum VitaeFotos & Viagens
ÁREAS DE ATUAÇÃOCTO as a ServiceCorporate ArchitectureSoftware & TechnologyFrontend DevelopmentBackend DevelopmentStrategy & ConsultingPlatform & DevSecOpsCustomer ExperienceAgile Culture
Hub de InovaçãoDistributed LT & BlockchainData Science & AnalyticsCybersecurity PlatformIntelligent AutomationAI & Machine Learning
CURSOS & TREINAMENTOSBlockchain & Distributed LTCybersecurity PlatformIntelligent AutomationFrontend DevelopmentBackend DevelopmentPlatform & DevSecOpsAI & Machine LearningProgressive Web AppsAgile Culture
Hackathons & Prêmios
PROJETOS REALIZADOSWEB3 / BLOCKCHAIN 2017 ~ 2024BitcoinEthereumRippleStarknetDIDInternet ComputerMarketplacesNFTHyperledgerWalletsDAODeFi DashboardsCrypto Checkoutsecurity tokensBANCOS 2016 ~ 2021Santander TottaSafra S.A.Santander BrasilProjetos Antigos 2000 ~ 2016SKYIntelACSNinho SoleilHP YouStoreHP Cartucho PirataMarlboro RacingMercedes BenzTortinhas AdriaChevrolet CaptivaGPA Sommeliers ClubUOL FinanceGafisaSprinterCasas BahiaJVCLew´laraPão de AçucarSchin RefrigerantesNescau 2.0PapaizTV CulturaSpacekidsBondage MusicMaison CriolaAntarctica OriginalNX ZeroSLK 2005Classe AClasse CPetrobrasBraskemNíveaJohnson & JohnsonAbyaraTIM (URA)NestléUOL
Blog PostsHACKERRANK 2017 ~ 2018#sockMerchant#countingValleys#repeatedstring#jumpingOnClouds#leftRotation
Fale Comigo
Isenção de ResponsabilidadePolítica de PrivacidadeTermos e Condições
Este PWA foi construído com ❤ no meu tempo livre 🤸‍♂️ através dos anos...