Một danh sách các số nguyên dương có thể được hình dung như một dãy núi được lượng tử hóa trong đó mỗi mục nhập danh sách biểu thị chiều cao của một phần dọc của các ngọn núi.
Ví dụ, danh sách
1, 2, 2, 3, 4, 3, 5, 3, 2, 1, 2, 3, 3, 3, 2, 2, 1, 3
có thể trở thành phạm vi
x
x x
xxxxx xxx x
xxxxxxxx xxxxxx x
xxxxxxxxxxxxxxxxxx
(Những người ít thơ hơn có thể gọi đây là biểu đồ thanh, nhưng tôi lạc đề.)
Câu hỏi trong thử thách này là: Có bao nhiêu đỉnh nằm trong dãy núi của một số danh sách tùy ý? Về cơ bản, có bao nhiêu cực đại địa phương trong danh sách?
Một đỉnh được định nghĩa là một phần liền kề của một hoặc nhiều cột của dãy núi có chiều cao bằng nhau, trong đó các cột ngay bên trái và bên phải có chiều cao thấp hơn.
Thật dễ dàng để nói rằng ví dụ này có bốn đỉnh tại các vị trí được ngoặc đơn này:
1, 2, 2, 3, (4), 3, (5), 3, 2, 1, 2, (3, 3, 3), 2, 2, 1, (3)
Lưu ý cách phần (3, 3, 3)
cao nguyên được tính là một đỉnh vì nó là một tập hợp các cột liền kề có chiều cao bằng nhau, cao hơn các cột lân cận.
Điểm cuối cùng cũng (3)
được tính là một đỉnh vì vì mục đích của thử thách này, chúng ta sẽ xác định hàng xóm bên trái của cột ngoài cùng bên phải và hàng xóm bên phải của cột ngoài cùng bên phải có chiều cao bằng không.
Điều này có nghĩa là một danh sách chỉ có một giá trị, ví dụ 1, 1, 1
, có thể được hiểu là 0, 1, 1, 1, 0
, và do đó có một đỉnh chứ không phải không có : 0, (1, 1, 1), 0
.
Danh sách duy nhất có đỉnh bằng không là danh sách trống.
Thử thách
Viết một hàm hoặc chương trình có trong một danh sách tùy ý các số nguyên dương và in hoặc trả về số lượng đỉnh trong phạm vi núi tương ứng.
Mã ngắn nhất tính bằng byte thắng. Tiebreaker là bài trước.
Các trường hợp thử nghiệm
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