Une liste d'entiers positifs peut être visualisée comme une chaîne de montagnes quantifiée où chaque entrée de la liste représente la hauteur d'une section verticale des montagnes.
Par exemple, la liste
1, 2, 2, 3, 4, 3, 5, 3, 2, 1, 2, 3, 3, 3, 2, 2, 1, 3
peut devenir la gamme
x
x x
xxxxx xxx x
xxxxxxxx xxxxxx x
xxxxxxxxxxxxxxxxxx
(Les gens moins poétiques pourraient appeler cela un graphique à barres, mais je m'égare.)
La question dans ce défi est la suivante: combien de pics se trouvent dans la chaîne de montagnes d'une liste arbitraire? Essentiellement, combien de maxima locaux figurent dans la liste?
Un pic est défini comme une section contiguë d'une ou plusieurs colonnes de la chaîne de montagnes qui sont toutes égales en hauteur, où les colonnes immédiatement à gauche et à droite sont plus basses.
Il est facile de dire visuellement que l'exemple a quatre pics à ces emplacements entre parenthèses:
1, 2, 2, 3, (4), 3, (5), 3, 2, 1, 2, (3, 3, 3), 2, 2, 1, (3)
Notez comment la (3, 3, 3)
section de plateau compte comme un pic car il s'agit d'un ensemble contigu de colonnes de hauteur égale, plus élevées que ses colonnes voisines.
Le dernier (3)
compte également comme un pic car, pour les besoins de ce défi, nous définirons le voisin gauche de la colonne la plus à gauche et le voisin droit de la colonne la plus à droite comme étant à la hauteur zéro.
Cela signifie que la liste avec une seule valeur, par exemple 1, 1, 1
, peut être interprété comme 0, 1, 1, 1, 0
, et a donc un pic, non pas: 0, (1, 1, 1), 0
.
La seule liste avec zéro pics est la liste vide.
Défi
Écrivez une fonction ou un programme qui prend une liste arbitraire d'entiers positifs et imprime ou renvoie le nombre de pics dans la chaîne de montagnes correspondante.
Le code le plus court en octets gagne. Tiebreaker est un post antérieur.
Cas de test
Input List -> Output Peak Count
[empty list] -> 0
1, 1, 1 -> 1
1, 2, 2, 3, 4, 3, 5, 3, 2, 1, 2, 3, 3, 3, 2, 2, 1, 3 -> 4
1 -> 1
1, 1 -> 1
2, 2, 2, 2, 2 -> 1
90 -> 1
2, 1, 2 -> 2
5, 2, 5, 2, 5 -> 3
2, 5, 2, 5, 2, 5, 2 -> 3
1, 2, 3, 4 -> 1
1, 2, 3, 4, 1, 2 -> 2
1, 3, 5, 3, 1 -> 1
7, 4, 2, 1, 2, 3, 7 -> 2
7, 4, 2, 1, 2, 1, 2, 3, 7 -> 3
1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2 -> 10
1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1 -> 10
2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2 -> 10
1, 3, 3, 3, 1, 3, 3, 1, 3, 1, 3, 3, 3, 3, 1 -> 4
12, 1, 2, 1, 2, 3, 3, 3, 2, 4, 4, 4, 1, 5, 5, 4, 7, 9 -> 6
87, 356, 37673, 3676, 386, 909, 909, 909, 909, 454, 909, 909 -> 3
87, 356, 37673, 3676, 386, 909, 909, 909, 909, 454, 909, 908, 909 -> 4