Mathematica 66 58 51
Aktuelle Lösung
Verkürzt durch einen Beitrag von Calle.
Cases[Partition[#,3,1],{a_,b_,c_}/;(a-b) (b-c)<0⧴b]&
Partition[#,3,1] findet die dreifachen.
(a-b) (b-c)<0wenn wahr ist , und nur dann , wenn bunter a, coder über a, c. und schaut auf nimmt die Anzeichen der Unterschiede. Ein lokales Extrem wird entweder {-1,1}oder zurückkehren {1,-1}.
Beispiele
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}
Frühere Lösung
Dies sieht beispielhaft alle Tripel (generiert von Partition) aus und bestimmt, ob das mittlere Element kleiner als beide Extreme oder größer als die Extreme ist.
Cases[Partition[#,3,1],{a_,b_,c_}/;(b<a∧b<c)∨(b>a∧b>c)⧴b]& ;
Erste Lösung
Dies findet die Dreiergruppen und nimmt die Anzeichen der Unterschiede wahr. Ein lokales Extrem wird entweder {-1,1}oder zurückkehren {1,-1}.
Cases[Partition[#,3,1],x_/;Sort@Sign@Differences@x=={-1,1}⧴x[[2]]]&
Beispiel
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}
Analyse :
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}}
% verweist auf das Ergebnis aus der jeweils vorhergehenden Zeile.
Differences/@ %
{{1, -3}, {-3, -1}, {-1, 3}, {3, -9}, {-9, 3}, {3, 0}, {0, -2}, {-2, 9}}
Sort@Sign@Differences@x=={-1,1}identifiziert die Tripel aus {{9, 10, 7}, {10, 7, 6}, {7, 6, 9}, {6, 9, 0}, {9, 0, 3}, {0, 3}. 3}, {3, 3, 1}, {3, 1, 10}}, so dass das Vorzeichen (-, 0, +) der Differenzen aus a -1und a besteht 1. Im vorliegenden Fall sind dies:
{{9, 10, 7}, {7, 6, 9}, {6, 9, 0}, {9, 0, 3}, {3, 1, 10}}
Für jeden dieser Fälle x[[2]]bezieht sich x auf den zweiten Term. Dies sind alle lokalen Maxima und Minima.
{10, 6, 9, 0, 1}