Ir al contenido principal

Intersecciones parciales

Definir la función

interseccionParcial :: Eq a => Int -> [[a]] -> [a]

tal que (interseccionParcial n xss) es la lista de los elementos que pertenecen al menos a n conjuntos de xss. Por ejemplo,

interseccionParcial 1 [[3,4],[4,5,9],[5,4,7]]  == [3,4,5,9,7]
interseccionParcial 2 [[3,4],[4,5,9],[5,4,7]]  == [4,5]
interseccionParcial 3 [[3,4],[4,5,9],[5,4,7]]  == [4]
interseccionParcial 4 [[3,4],[4,5,9],[5,4,7]]  == []

Soluciones

import Data.List (nub)

interseccionParcial :: Eq a => Int -> [[a]] -> [a]
interseccionParcial n xss =
    [x | x <- nub (concat xss)
       , length [xs | xs <- xss, x `elem` xs] >= n]