ALLAN AVELARTechnology Solutions
🍰Buenas Tardes,<username class="jsx-1036735364">Visitante</username>!Bienvenido a mi website!Aplicación Web Progresiva (PWA)Instalar en su dispositivoChromecast Controlsstatus: not playing or showingVolumeDown50%VolumeUpPlayPausestoppedStopResetFullscreenExpandAcceso RestringidoConectar / RegistrarseIngrese sus credenciales de accesoObtener Acceso RestringidoSolicita tu Código de AccesoDatos de RegistroTus datos personales y de accesoProyectos / ServiciosTu historial de contrataciónProductos / DescargasTu historial de comprasChromecast AppsSus contratos de transmisiónCréditos / ComprasSu saldo e historial crediticioEspacio de AccesoTus accesos a contenidos restringidosNotificacionesNotificaciones habilitadas para tiDesconectarDesconecta a tu usuarioContenido disponibleHomeSobre Mi6Resumen PersonalUn peu comment tout a commencéResumen ProfesionalUn poco sobre mi trayectoriaMetodología de Trabajo¡Cómo hago para que suceda!Memorias PersonalesContenido RestringidoCurriculum VitaeContenido RestringidoViajes & FotosContenido RestringidoÁreas de Actuación10Todos mis serviciosResumen de todas las áreas.CTO as a ServiceTener un C-Level de medio tiempoCorporate ArchitectureAgilidad y tecnología como filosofíaSoftware & TechnologyMuy prontoFrontend DevelopmentMuy prontoBackend DevelopmentMuy prontoStrategy & ConsultingMuy prontoPlatform & DevSecOpsMuy prontoCustomer ExperienceMuy prontoAgile CultureMuy prontoCentro de Innovación6Cultura de InnovaciónVentajas y cómo implementarDistributed LT & BlockchainMuy prontoData Science & AnalyticsMuy prontoCybersecurity PlatformMuy prontoIntelligent AutomationMuy prontoAI & Machine LearningMuy prontoCursos & Formación9Distributed LT & BlockchainMuy prontoCybersecurity PlatformMuy prontoIntelligent AutomationMuy prontoFrontend DevelopmentMuy prontoBackend DevelopmentMuy prontoPlatform & DevSecOpsMuy prontoAI & Machine LearningMuy prontoProgressive Web AppsMuy prontoAgile CultureMuy prontoHable ConmigoPROYECTOS REALIZADOSTodos mis proyectosResumen de todas las áreas.Instituciones Financieras3Banco Santander TottaContenido RestringidoBanco Santander BrasilContenido RestringidoBanco Safra S.AContenido RestringidoWeb3 / Blockchain15Bitcoin (BTC)Contenido RestringidoEthereum VM (ETH)Contenido RestringidoRipple (XRP)Contenido RestringidoHyperledger.orgContenido RestringidoInternet ComputerContenido RestringidoStarknet (Cairo)Contenido RestringidoPolkadot (DOT)Contenido RestringidoDeFi DashboardsContenido RestringidoToken MarketplacesContenido RestringidoCrypto CheckoutsContenido RestringidoCold / Hot WalletsContenido RestringidoWallet ConnectorsContenido RestringidoNon Fungible Tokens (NFT)Contenido RestringidoDescentralized Identities (DID)Contenido RestringidoDescentralized Organizations (DAO)Contenido RestringidoProyectos Antiguos29TIM | Unidad de Respuesta AudibleAdobe 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 TermsTérminos y CondicionesPolítica de PrivacidadDescargo de Responsabilidad
Usuario / ContraseñaBlockchainOlvidaste tu contraseña?Acceder¿No tienes una cuenta? ¡Ver una demostración!
🚀 Fevereiro 25, 2018♻ Mayo 21, 2018reading 9 minutos de lectura

Warm-up Challenges ⚡ Counting Valleys

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!

Counting Valleys es uno de los desafíos iniciales con dificultad 'EASY'.


¿Cuál es el desafío?

Gary es un ávido escalador. Realiza un seguimiento meticuloso de sus caminatas, prestando mucha atención a los pequeños detalles como la topografía. Durante su última caminata, dio exactamente n pasos. Para cada paso que dio, anotó si era un paso hacia arriba, U, o hacia abajo, D. Las caminatas de Gary comienzan y terminan al nivel del mar y cada paso hacia arriba o hacia abajo representa un cambio de 1 unidad de altitud. Definimos los términos siguientes:

  • Una montaña es una secuencia de pasos consecutivos sobre el nivel del mar, comenzando con un ascenso desde el nivel del mar y terminando con un paso hacia el nivel del mar.
  • Un valle es una secuencia de pasos consecutivos por debajo del nivel del mar, comenzando con un paso por debajo del nivel del mar y terminando con un paso al nivel del mar.

Dada la secuencia de Gary de subir y bajar los escalones durante su última caminata, encuentra e imprime el número de valles que caminó. Por ejemplo, si el camino de Gary es s = [DDUUUUDD], primero entrará en un valle que tiene 2 unidades de profundidad. Luego sube una montaña de 2 unidades de altura. Finalmente, vuelve al nivel del mar y termina su caminata.

¿Qué tenemos que hacer?

Una función que debería devolver un número entero con el número de valles recorridos por Gary.

Parámetros
  • n = el número de pasos que caminó Gary
  • s = una string que describe tu camino

Sample Input

8
UDDDUDUU

Sample Output

1

Solución

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;

Primero creé tres variables; level para rastrear la altitud; valleys para llevar la cuenta del número de valles que ha atravesado Gary; i para iterar el forloop;

for in

Creé un loop for que seguirá la secuencia de pasos que siguió Gary. for (i in s) {

La condición ternaria if comprueba si el paso de Gary estaba arriba U: s.charAt(i) === 'U' ? Si lo estaba, incrementa el conteo: level++ Si no, disminuya el conteo. level--

Luego compruebo que Gary está al nivel del mar level === 0 y que el paso estaba arriba && s.charAt(i) === 'U', en este caso que representa que acaba de escalar un valle. valleys++

Como al inicio del desafío nos informan que Gary inicia y finaliza sus caminatas al nivel del mar, podemos ignorar si subió una montaña y enfocarnos solo en el valle 😎.

Finalmente, finalizo la función devolviendo el conteo final. 🖖


🕵Soluciones Adicionales

Otros idiomas que hablo


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

Pensamiento: Podemos juzgar el corazón de una persona por la forma en que trata a los animales.
Emmanuel Kant

💡 Últimos Insights:

No afirmo que estas respuestas sean las mejores o las más eficientes, son simplemente creaciones de mi intuición para resolver el problema en ese momento. Hoy probablemente lo haría diferente...
Sobre MiResumen ProfesionalMetodología de TrabajoMemorias PersonalesCurriculum VitaeFotos y Viajes
ÁREAS DE ACTUACIÓNCTO as a ServiceCorporate ArchitectureSoftware & TechnologyFrontend DevelopmentBackend DevelopmentStrategy & ConsultingPlatform & DevSecOpsCustomer ExperienceAgile Culture
Centro de InnovaciónDistributed LT & BlockchainData Science & AnalyticsCybersecurity PlatformIntelligent AutomationAI & Machine Learning
CURSOS Y FORMACIÓNBlockchain & Distributed LTCybersecurity PlatformIntelligent AutomationFrontend DevelopmentBackend DevelopmentPlatform & DevSecOpsAI & Machine LearningProgressive Web AppsAgile Culture
Hackatones y Premios
PROYECTOS REALIZADOSWEB3 / BLOCKCHAIN 2017 ~ 2024BitcoinEthereumRippleStarknetDIDInternet ComputerMarketplacesNFTHyperledgerWalletsDAODeFi DashboardsCrypto Checkoutsecurity tokensBANCOS 2016 ~ 2021Santander TottaSafra S.A.Santander BrasilProyectos Antiguos 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
Hable Conmigo
Descargo de ResponsabilidadPolítica de PrivacidadTérminos y Condiciones
Esta PWA se creó con ❤ en mi tiempo libre 🤸‍♂️ a través de de los años...