Eine Liste positiver Ganzzahlen kann als quantisierte Bergkette dargestellt werden, wobei jeder Listeneintrag die Höhe eines vertikalen Abschnitts der Berge darstellt.
Zum Beispiel die Liste
1, 2, 2, 3, 4, 3, 5, 3, 2, 1, 2, 3, 3, 3, 2, 2, 1, 3
kann der Bereich werden
x
x x
xxxxx xxx x
xxxxxxxx xxxxxx x
xxxxxxxxxxxxxxxxxx
(Weniger poetische Leute nennen das vielleicht ein Balkendiagramm, aber ich schweife ab.)
Die Frage bei dieser Herausforderung lautet: Wie viele Gipfel gibt es in einer willkürlichen Liste im Gebirgszug? Wie viele lokale Maxima sind im Wesentlichen in der Liste enthalten?
Ein Gipfel ist definiert als zusammenhängender Abschnitt einer oder mehrerer Spalten des Gebirges, die alle gleich hoch sind, wobei die Spalten unmittelbar links und rechts niedriger sind.
Es ist leicht visuell zu erkennen, dass das Beispiel an diesen in Klammern gesetzten Stellen vier Peaks aufweist:
1, 2, 2, 3, (4), 3, (5), 3, 2, 1, 2, (3, 3, 3), 2, 2, 1, (3)
Beachten Sie, dass der (3, 3, 3)
Plateau-Abschnitt als Peak gilt, da es sich um eine zusammenhängende Gruppe von Spalten handelt, deren Höhe höher ist als die der benachbarten Spalten.
Der letzte (3)
zählt ebenfalls als Peak, da wir für die Zwecke dieser Herausforderung den linken Nachbarn der ganz linken Spalte und den rechten Nachbarn der ganz rechten Spalte als Höhe Null definieren.
Dies bedeutet , dass eine Liste mit nur einem Wert, zum Beispiel 1, 1, 1
, kann als interpretiert wird 0, 1, 1, 1, 0
und hat somit einen Peak, nicht none: 0, (1, 1, 1), 0
.
Die einzige Liste mit Nullspitzen ist die leere Liste.
Herausforderung
Schreiben Sie eine Funktion oder ein Programm, das eine beliebige Liste positiver Ganzzahlen aufnimmt und die Anzahl der Gipfel im entsprechenden Gebirgszug ausgibt oder zurückgibt.
Der kürzeste Code in Bytes gewinnt. Tiebreaker ist früherer Beitrag.
Testfälle
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