Extremos locales
Un mínimo local de una lista es un elemento de la lista que es menor que su predecesor y que su sucesor en la lista. Por ejemplo, 1 es un mínimo local de [8,2,1,3,7,6,4,0,5] ya que es menor que 2 (su predecesor) y que 3 (su sucesor).
Análogamente se definen los máximos locales. Por ejemplo, 7 es un máximo local de [8,2,1,3,7,6,4,0,5] ya que es mayor que 7 (su predecesor) y que 6 (su sucesor).
Los extremos locales están formados por los mínimos y máximos locales. Por ejemplo, los extremos locales de [8,2,1,3,7,6,4,0,5] son el 1, el 7 y el 0.
Definir la función
1 |
extremos :: Ord a => [a] -> [a] |
tal que (extremos xs) es la lista de los extremos locales de la lista xs. Por ejemplo,
1 2 |
extremos [8,2,1,3,7,6,4,0,5] == [1,7,0] extremos [8,2,1,3,7,7,4,0,5] == [1,7,0] |
Soluciones
[schedule expon=’2017-06-05′ expat=»06:00″]
- Las soluciones se pueden escribir en los comentarios hasta el 05 de junio.
- El código se debe escribir entre una línea con <pre lang=»haskell»> y otra con </pre>
[/schedule]
[schedule on=’2017-06-05′ at=»06:00″]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
-- 1ª definición (por comprensión) -- =============================== extremos1 :: Ord a => [a] -> [a] extremos1 xs = [y | (x,y,z) <- zip3 xs (tail xs) (drop 2 xs), extremo x y z] -- (extremo x y z) se verifica si y es un extremo local de [x,y,z]. Por -- ejemplo, -- extremo 2 1 3 == True -- extremo 3 7 6 == True -- extremo 7 6 4 == False -- extremo 5 6 7 == False -- extremo 5 5 7 == False extremo :: Ord a => a -> a -> a -> Bool extremo x y z = (y < x && y < z) || (y > x && y > z) -- 2ª definición (por recursión) -- ============================= extremos2 :: Ord a => [a] -> [a] extremos2 (x:y:z:xs) | extremo x y z = y : extremos2 (y:z:xs) | otherwise = extremos2 (y:z:xs) extremos2 _ = [] |
[/schedule]
6 Comentarios