J - 22 char
Couldn't help it ;)
(}.@}:#~0=2+/\2*@-/\])
Explanation follows:
2*@-/\]
- Over each pair of elements in the argument (each 2-item long infix) take the signum of the difference. This is equal to 1 if the difference is positive, 0 if zero, and -1 if negative.2+/\
- Now over each of these new pairs, add the elements.0=
- Test whether each result is equal to 0. This only happens if 1 is added to -1, i.e. if one side had a positive difference and the other had a negative.}.@}:
- Cut off the first and the last element, because those can't possibly be extrema, and we lost information for them anyway by doing the pairs stuff above.#~
- Use the true values on the right side to pick items from the list on the left side.
Usage:
(}.@}:#~0=2+/\2*@-/\]) 1 2 1
2
(}.@}:#~0=2+/\2*@-/\]) 0 1 0 1 0
1 0 1
(}.@}:#~0=2+/\2*@-/\]) i.0 NB. i.0 is the empty list (empty result also)
(}.@}:#~0=2+/\2*@-/\]) 0 1 2 0 1 0
2 0 1