매스 매 티카 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, +)가 a -1
및 a 로 구성됩니다 1
. 현재의 경우 :
{{9, 10, 7}, {7, 6, 9}, {6, 9, 0}, {9, 0, 3}, {3, 1, 10}}
이러한 각 경우에 x x[[2]]
는 두 번째 항을 나타냅니다. 그것들은 모든 지역 최대치와 최소치가 될 것입니다.
{10, 6, 9, 0, 1}