Toán học 66 58 51
Giải pháp tạm thời
Rút ngắn nhờ đóng góp của Calle.
Cases[Partition[#,3,1],{a_,b_,c_}/;(a-b) (b-c)<0⧴b]&
Partition[#,3,1] tìm thấy bộ ba.
(a-b) (b-c)<0là đúng nếu và chỉ nếu blà bên dưới a, choặc ở trên a, c. và nhìn vào có dấu hiệu của sự khác biệt. Một cực địa phương sẽ trở lại {-1,1}hoặc {1,-1}.
Ví dụ
Cases[Partition[#, 3, 1], {a_, b_, c_} /; (a - b) (b - c) < 0 :> b] &[{1, 2, 1}]
Cases[Partition[#, 3, 1], {a_, b_, c_} /; (a - b) (b - c) < 0 :> b] &[{0, 1, 0, 1, 0}]
Cases[Partition[#, 3, 1], {a_, b_, c_} /; (a - b) (b - c) < 0 :> b] &[{}]
Cases[Partition[#, 3, 1], {a_, b_, c_} /; (a - b) (b - c) < 0 :> b] &[{9, 10, 7, 6, 9, 0, 3, 3, 1, 10}]
{2}
{1, 0, 1}
{}
{10, 6, 9, 0, 1}
Giải pháp trước đó
Điều này có vẻ như tất cả các bộ ba (được tạo bởi Partition) và xác định xem phần tử ở giữa có nhỏ hơn cả hai cực trị hay lớn hơn các cực trị hay không.
Cases[Partition[#,3,1],{a_,b_,c_}/;(b<a∧b<c)∨(b>a∧b>c)⧴b]& ;
Giải pháp đầu tiên
Điều này tìm thấy bộ ba, và nhìn vào có dấu hiệu của sự khác biệt. Một cực địa phương sẽ trở lại {-1,1}hoặc {1,-1}.
Cases[Partition[#,3,1],x_/;Sort@Sign@Differences@x=={-1,1}⧴x[[2]]]&
Thí dụ
Cases[Partition[#,3,1],x_/;Sort@Sign@Differences@x=={-1,1}:>x[[2]]]&[{9, 10, 7, 6, 9, 0, 3, 3, 1, 10}]
{10, 6, 9, 0, 1}
Phân tích :
Partition[{9, 10, 7, 6, 9, 0, 3, 3, 1, 10}]
{{9, 10, 7}, {10, 7, 6}, {7, 6, 9}, {6, 9, 0}, {9, 0, 3}, {0, 3, 3}, { 3, 3, 1}, {3, 1, 10}}
% đề cập đến kết quả từ dòng trước tương ứng.
Differences/@ %
{{1, -3}, {-3, -1}, {-1, 3}, {3, -9}, {-9, 3}, {3, 0}, {0, -2}, {-2, 9}}
Sort@Sign@Differences@x=={-1,1}xác định các bộ ba từ {{9, 10, 7}, {10, 7, 6}, {7, 6, 9}, {6, 9, 0}, {9, 0, 3}, {0, 3, 3}, {3, 3, 1}, {3, 1, 10}} sao cho dấu (-, 0, +) của sự khác biệt bao gồm a -1và a 1. Trong trường hợp hiện tại đó là:
{{9, 10, 7}, {7, 6, 9}, {6, 9, 0}, {9, 0, 3}, {3, 1, 10}}
Đối với mỗi trường hợp này, x, x[[2]]đề cập đến thuật ngữ thứ hai. Đó sẽ là tất cả các cực đại và cực tiểu địa phương.
{10, 6, 9, 0, 1}