Definir la función
reducida :: Eq a => [a] -> [a] |
tal que (reducida xs) es la lista obtenida a partir de xs de forma que si hay dos o más elementos idénticos consecutivos, borra las repeticiones y deja sólo el primer elemento. Por ejemplo,
ghci> reducida "eesssooo essss toodddooo" "eso es todo" |
Nota: Basado en el ejercicio Apaxiaaaaaaaaaaaans! de Kattis.
Soluciones
import Data.List (group) -- 1ª solución (por recursión): reducida1 :: Eq a => [a] -> [a] reducida1 [] = [] reducida1 (x:xs) = x : reducida1 (dropWhile (==x) xs) -- 2ª solución (por comprensión): reducida2 :: Eq a => [a] -> [a] reducida2 xs = [x | (x:_) <- group xs] -- 3ª solución (sin argumentos): reducida3 :: Eq a => [a] -> [a] reducida3 = map head . group |
Lo anterior puede simplificarse a