Reducción de consecutivos relacionados
Definir la función
1 |
reducida :: (a -> a -> Bool) -> [a] -> [a] |
tal que (reducida r xs) obtenida elimando en xs las repeticiones de elementos consecutivos queverifican la relación r. Por ejemplo,
1 2 3 4 5 |
reducida (==) [4,4,2,1,1,1,2,5] == [4,2,1,2,5] reducida (<) [4,4,2,1,1,1,2,5] == [4,4,2,1,1,1] reducida (>=) [4,4,2,1,1,1,2,5] == [4,5] reducida (>) [4,4,2,1,1,1,2,5] == [4,4,5] reducida (/=) [4,4,2,1,1,1,2,5] == [4,4] |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import Data.List (groupBy) -- 1ª solución reducida :: (a -> a -> Bool) -> [a] -> [a] reducida _ [] = [] reducida r (x:xs) = x : reducida r (dropWhile (r x) xs) -- 2ª solución reducida2 :: (a -> a -> Bool) -> [a] -> [a] reducida2 r = foldr aux [] where aux x xs = x : dropWhile (r x) xs -- 3ª solución reducida3 :: (a -> a -> Bool) -> [a] -> [a] reducida3 r xs = map head (groupBy r xs) |
Nuevas soluciones
- En los comentarios se pueden escribir nuevas soluciones.
- El código se debe escribir entre una línea con <pre lang="haskell"> y otra con </pre>