Mathematica 66 58 51
ทางออกปัจจุบัน
ขอบคุณสั้น ๆ ที่มีส่วนร่วมโดย Calle
Cases[Partition[#,3,1],{a_,b_,c_}/;(a-b) (b-c)<0⧴b]&
Partition[#,3,1] พบอเนกประสงค์
(a-b) (b-c)<0เป็นความจริงและถ้าหากbอยู่ด้านล่างa, cหรือเหนือ,a cและดูที่ใช้สัญญาณของความแตกต่าง มากในท้องถิ่นจะกลับมาอย่างใดอย่างหนึ่งหรือ{-1,1}{1,-1}
ตัวอย่าง
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}
โซลูชันก่อนหน้า
สิ่งนี้จะดูตัวอย่างอเนกประสงค์ทั้งหมด (สร้างโดยPartition) และพิจารณาว่าองค์ประกอบกลางน้อยกว่าทั้งสองสุดขั้วหรือมากกว่าสุดขั้ว
Cases[Partition[#,3,1],{a_,b_,c_}/;(b<a∧b<c)∨(b>a∧b>c)⧴b]& ;
ทางออกแรก
สิ่งนี้พบสิ่งที่เป็นอเนกประสงค์และมองดูเครื่องหมายของความแตกต่าง มากในท้องถิ่นจะกลับมาอย่างใดอย่างหนึ่งหรือ{-1,1}{1,-1}
Cases[Partition[#,3,1],x_/;Sort@Sign@Differences@x=={-1,1}⧴x[[2]]]&
ตัวอย่าง
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}
วิเคราะห์ :
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}}
% อ้างถึงผลลัพธ์จากบรรทัดก่อนหน้าที่เกี่ยวข้อง
Differences/@ %
{{1, -3}, {-3, -1}, {-1, 3}, {3, -9}, {-9, 3}, {3, 0}, {0, -2}, {-2, 9}}
Sort@Sign@Differences@x=={-1,1}ระบุอเนกประสงค์จาก {{9, 10, 7}, {10, 7, 6}, {7, 6, 9}, {6, 9, 0}, {9, 0, 3}, {0, 3, 3}, {3, 3, 1}, {3, 1, 10}} ดังกล่าวว่าการเข้าสู่ระบบ (-, 0, +) ของความแตกต่างประกอบไปด้วยและ-1 1ในกรณีปัจจุบันคือ:
{{9, 10, 7}, {7, 6, 9}, {6, 9, 0}, {9, 0, 3}, {3, 1, 10}}
สำหรับแต่ละกรณีเหล่านี้ x x[[2]]หมายถึงคำที่สอง สิ่งเหล่านี้จะเป็น maxima และ minima ท้องถิ่นทั้งหมด
{10, 6, 9, 0, 1}