Un elenco di numeri interi positivi può essere visualizzato come una catena montuosa quantizzata in cui ciascuna voce dell'elenco rappresenta l'altezza di una sezione verticale delle montagne.
Ad esempio, l'elenco
1, 2, 2, 3, 4, 3, 5, 3, 2, 1, 2, 3, 3, 3, 2, 2, 1, 3
può diventare la gamma
x
x x
xxxxx xxx x
xxxxxxxx xxxxxx x
xxxxxxxxxxxxxxxxxx
(Le persone meno poetiche potrebbero chiamarlo un grafico a barre, ma sto divagando.)
La domanda in questa sfida è: quante cime si trovano nella catena montuosa di un elenco arbitrario? In sostanza, quanti massimi locali sono presenti nell'elenco?
Un picco è definito come una sezione contigua di una o più colonne della catena montuosa tutte uguali in altezza, dove le colonne immediatamente a sinistra e a destra sono più basse in altezza.
È facile dire visivamente che l'esempio ha quattro picchi in queste posizioni tra parentesi:
1, 2, 2, 3, (4), 3, (5), 3, 2, 1, 2, (3, 3, 3), 2, 2, 1, (3)
Nota come la (3, 3, 3)
sezione del plateau conta come un picco perché è un insieme contiguo di colonne uguali in altezza, più alte delle sue colonne vicine.
Anche l'ultimo (3)
conta come picco perché, ai fini di questa sfida, definiremo il vicino sinistro della colonna più a sinistra e il vicino destro della colonna più a destra per essere entrambi altezza zero.
Ciò significa che una lista con un solo valore, per esempio 1, 1, 1
, può essere interpretata come 0, 1, 1, 1, 0
, e quindi ha un picco, non nessuno: 0, (1, 1, 1), 0
.
L'unica lista con zero picchi è la lista vuota.
Sfida
Scrivi una funzione o un programma che contiene un elenco arbitrario di numeri interi positivi e stampa o restituisce il numero di picchi nella catena montuosa corrispondente.
Vince il codice più breve in byte. Tiebreaker è post precedente.
Casi 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