Enunciado
-- 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 [3,2,1,3,7,7,1,0,2] ya que es menor que 2 (su
-- predecesor) y que 3 (su sucesor).
--
-- Definir la función
-- minimosLocales :: Ord a => [a] -> [a]
-- tal que (minimosLocales xs) es la lista de los mínimos locales de la
-- lista xs. Por ejemplo,
-- minimosLocales [3,2,1,3,7,7,9,6,8] == [1,6]
-- minimosLocales [1..100] == []
-- minimosLocales "mqexvzat" == "eva" |
-- 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 [3,2,1,3,7,7,1,0,2] ya que es menor que 2 (su
-- predecesor) y que 3 (su sucesor).
--
-- Definir la función
-- minimosLocales :: Ord a => [a] -> [a]
-- tal que (minimosLocales xs) es la lista de los mínimos locales de la
-- lista xs. Por ejemplo,
-- minimosLocales [3,2,1,3,7,7,9,6,8] == [1,6]
-- minimosLocales [1..100] == []
-- minimosLocales "mqexvzat" == "eva"
Soluciones
-- 1ª definición (por recursión):
minimosLocales1 :: Ord a => [a] -> [a]
minimosLocales1 (x:y:z:xs) | y < x && y < z = y : minimosLocales1 (z:xs)
| otherwise = minimosLocales1 (y:z:xs)
minimosLocales1 _ = []
-- 2ª definición (por comprensión):
minimosLocales2 :: Ord a => [a] -> [a]
minimosLocales2 xs =
[y | (x,y,z) <- zip3 xs (tail xs) (drop 2 xs), y < x, y < z] |
-- 1ª definición (por recursión):
minimosLocales1 :: Ord a => [a] -> [a]
minimosLocales1 (x:y:z:xs) | y < x && y < z = y : minimosLocales1 (z:xs)
| otherwise = minimosLocales1 (y:z:xs)
minimosLocales1 _ = []
-- 2ª definición (por comprensión):
minimosLocales2 :: Ord a => [a] -> [a]
minimosLocales2 xs =
[y | (x,y,z) <- zip3 xs (tail xs) (drop 2 xs), y < x, y < z]
Se puede imprimir o compartir con
2 soluciones de “Mínimos locales”