Eliminación de triplicados
Definir la función
1 |
sinTriplicados :: Eq a => [a] -> [a] |
tal que (sinTriplicados xs) es la lista obtenida dejando en xs sólo las dos primeras ocurrencias de cada uno de sus elementos. Por ejemplo,
1 2 3 4 5 6 7 8 |
sinTriplicados "aaabcbccdbabdcd" == "aabcbcdd" sinTriplicados "xxxxx" == "xx" sinTriplicados "abcabc" == "abcabc" sinTriplicados "abcdabcaba" == "abcdabc" sinTriplicados "abacbadcba" == "abacbdc" sinTriplicados "aaabcbccdbabdcd" == "aabcbcdd" sinTriplicados (show (5^4^3)) == "54210108624757363989" sinTriplicados (show (8^8^8)) == "60145207536139279488" |
Soluciones
1 2 3 4 5 6 7 8 9 |
import Data.List (delete) sinTriplicados :: Eq a => [a] -> [a] sinTriplicados xs = aux xs [] [] where aux [] _ _ = [] aux (x:xs) ys zs | x `elem` zs = aux xs ys zs | x `elem` ys = x : aux xs (delete x ys) (x:zs) | otherwise = x : aux xs (x:ys) zs |
6 Comentarios