Список позитивних цілих чисел можна візуалізувати як квантований гірський масив, де кожен запис списку представляє висоту одного вертикального ділянки гір.
Наприклад, список
1, 2, 2, 3, 4, 3, 5, 3, 2, 1, 2, 3, 3, 3, 2, 2, 1, 3
може стати ареалом
x
x x
xxxxx xxx x
xxxxxxxx xxxxxx x
xxxxxxxxxxxxxxxxxx
(Менш поетичні люди можуть назвати це графіком, але я відхиляюся.)
Питання в цьому виклику: скільки вершин знаходиться в гірському масиві якогось довільного списку? По суті, скільки локальних максимумів є у списку?
Вершина визначається як суміжний переріз однієї або декількох колон гірського хребта, які всі рівні за висотою, де стовпці одразу зліва та праворуч нижчі за висотою.
Легко візуально сказати, що приклад має чотири піки у цих закруглених місцях:
1, 2, 2, 3, (4), 3, (5), 3, 2, 1, 2, (3, 3, 3), 2, 2, 1, (3)
Зверніть увагу, як (3, 3, 3)
розріз плато вважається вершиною, оскільки це суміжний набір стовпчиків, рівних за висотою, вищий, ніж сусідні колони.
Останній (3)
вважається також піком, тому що для цілей цього виклику ми визначимо лівий сусід крайнього лівого стовпця і правий сусід крайнього правого стовпця, щоб вони були нульовою висотою.
Це означає , що список тільки з одним значенням, наприклад 1, 1, 1
, може бути інтерпретований як 0, 1, 1, 1, 0
і , таким чином , має один пік, а НЕ ніхто: 0, (1, 1, 1), 0
.
Єдиний список з нульовими піками - це порожній список.
Виклик
Напишіть функцію або програму, яка містить довільний список натуральних чисел та друкує або повертає кількість вершин у відповідному гірському масиві.
Виграє найкоротший код у байтах. Tiebreaker - це раніше повідомлення.
Випробування
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