Список положительных целых чисел можно представить в виде квантованного горного хребта, где каждая запись списка представляет высоту одного вертикального участка гор.
Например, список
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