Se puede visualizar una lista de enteros positivos como una cadena montañosa cuantificada donde cada entrada de la lista representa la altura de una sección vertical de las montañas.
Por ejemplo, la lista
1, 2, 2, 3, 4, 3, 5, 3, 2, 1, 2, 3, 3, 3, 2, 2, 1, 3
puede convertirse en el rango
x
x x
xxxxx xxx x
xxxxxxxx xxxxxx x
xxxxxxxxxxxxxxxxxx
(La gente menos poética podría llamar a esto un gráfico de barras, pero estoy divagando).
La pregunta en este desafío es: ¿Cuántos picos hay en la cordillera de alguna lista arbitraria? Básicamente, ¿cuántos máximos locales hay en la lista?
Un pico se define como una sección contigua de una o más columnas de la cordillera que son todas iguales en altura, donde las columnas inmediatamente a la izquierda y a la derecha son más bajas en altura.
Es fácil decir visualmente que el ejemplo tiene cuatro picos en estas ubicaciones entre paréntesis:
1, 2, 2, 3, (4), 3, (5), 3, 2, 1, 2, (3, 3, 3), 2, 2, 1, (3)
Observe cómo la (3, 3, 3)
sección de meseta cuenta como un pico porque es un conjunto contiguo de columnas de igual altura, más altas que sus columnas vecinas.
El último también (3)
cuenta como un pico porque, para los propósitos de este desafío, definiremos el vecino izquierdo de la columna más a la izquierda y el vecino derecho de la columna más a la derecha para que ambos tengan altura cero.
Esto significa que una lista con sólo un valor, por ejemplo 1, 1, 1
, se puede interpretar como 0, 1, 1, 1, 0
, y por lo tanto tiene un pico, no ninguno: 0, (1, 1, 1), 0
.
La única lista con picos cero es la lista vacía.
Reto
Escriba una función o programa que tome una lista arbitraria de enteros positivos e imprima o devuelva el número de picos en la cadena montañosa correspondiente.
El código más corto en bytes gana. Tiebreaker es una publicación anterior.
Casos de prueba
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
fuente