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