Je publie mes solutions aux défis HackerRank afin d'améliorer mon apprentissage, de renforcer mes connaissances et d'établir une compréhension des concepts abordés. Si j'aide quelqu'un en partageant en cours de route, c'est encore mieux!
Counting Valleys est l'un des défis initiaux avec une difficulté 'EASY'.
Gary est un passionné d'escalade. Il suit méticuleusement vos promenades, en accordant une attention particulière aux petits détails comme la topographie. Lors de sa dernière promenade, il a fait exactement n
pas. Pour chaque pas qu'il a fait, il a noté si c'était un pas vers le haut, U
, ou un pas vers le bas, D
. Les randonnées de Gary commencent et se terminent au niveau de la mer et chaque pas vers le haut ou vers le bas représente un changement d'altitude d'une unité. On définit les termes suivants :
Étant donné la séquence de montée et de descente des marches de Gary lors de sa dernière marche, trouve et écris le nombre de vallées qu'il a parcourues. Par exemple, si le chemin de Gary est s = [DDUUUUDD]
, il entrera d'abord dans une vallée de 2 unités de profondeur. Puis il escalade une montagne haute de 2 unités. Enfin, il revient au niveau de la mer et termine sa promenade.
Une fonction qui devrait retourner un entier avec le nombre de vallées parcourues par Gary.
8
UDDDUDUU
1
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;
}
let level = 0 ,
valleys = 0 ,
i = 0 ;
J'ai d'abord créé trois variables; level
pour suivre l'altitude ; valleys
pour compter le nombre de vallées traversées par Gary; i
pour itérer lo forloop;
J'ai créé une loop for
qui suivra la séquence d'étapes suivie par Gary. for (i in s) {
La condition ternaire if
vérifie si le pas de Gary était supérieur U
: s.charAt(i) === 'U' ?
Si était, incrémente le compte : level++
Sinon, décrémenter le compte. level--
Je vérifie ensuite que Gary est au niveau de la mer level === 0
et que le pas était en haut && s.charAt(i) === 'U'
, dans ce écrin représentant qu'il vient de gravir une vallée. valleys++
Comme au début du défi on nous informe que Gary commence et termine ses balades au niveau de la mer, on peut ignorer s'il a escaladé une montagne et se concentrer uniquement sur la vallée.
Enfin, je finalise la fonction en retournant le décompte final.
Autres langues que je parle
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
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
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
}
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;
}
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;
}
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;
}
Pensée: Celui qui plante des arbres, sachant qu'il ne s’assiéra jamais à leur ombre, a tout au moins commencé à comprendre le sens de la vie!