Uma lista de números inteiros positivos pode ser visualizada como uma cadeia de montanhas quantizada em que cada entrada da lista representa a altura de uma seção vertical das montanhas.
Por exemplo, a lista
1, 2, 2, 3, 4, 3, 5, 3, 2, 1, 2, 3, 3, 3, 2, 2, 1, 3
pode se tornar o intervalo
x
x x
xxxxx xxx x
xxxxxxxx xxxxxx x
xxxxxxxxxxxxxxxxxx
(Pessoas menos poéticas podem chamar isso de gráfico de barras, mas eu discordo.)
A questão deste desafio é: Quantos picos existem na cordilheira de alguma lista arbitrária? Essencialmente, quantos máximos locais existem na lista?
Um pico é definido como uma seção contígua de uma ou mais colunas da cordilheira, todas iguais em altura, onde as colunas imediatamente à esquerda e à direita têm menor altura.
É fácil dizer visualmente que o exemplo tem quatro picos nesses locais entre parênteses:
1, 2, 2, 3, (4), 3, (5), 3, 2, 1, 2, (3, 3, 3), 2, 2, 1, (3)
Observe como a (3, 3, 3)seção do platô conta como um pico, porque é um conjunto contíguo de colunas com altura igual e superior às colunas vizinhas.
O último (3)conta também como pico, porque, para os propósitos deste desafio, definiremos o vizinho esquerdo da coluna mais à esquerda e o vizinho direito da coluna mais à direita como altura zero.
Isto significa que uma lista com apenas um valor, por exemplo 1, 1, 1, pode ser interpretado como 0, 1, 1, 1, 0, e, portanto, tem um pico, não nenhum: 0, (1, 1, 1), 0.
A única lista com picos zero é a lista vazia.
Desafio
Escreva uma função ou programa que obtenha uma lista arbitrária de números inteiros positivos e imprima ou retorne o número de picos na cordilheira correspondente.
O código mais curto em bytes vence. O desempatador é uma publicação anterior.
Casos de teste
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