Menu Close

Eliminación de n elementos

Enunciado

-- Definir la función
--    elimina :: Int -> [a] -> [[a]]
-- tal que (elimina n xs) es la lista de las listas obtenidas eliminando
-- n elementos de xs. Por ejemplo,
--    elimina 0 "abcd"  ==  ["abcd"]
--    elimina 1 "abcd"  ==  ["abc","abd","acd","bcd"]
--    elimina 2 "abcd"  ==  ["ab","ac","ad","bc","bd","cd"]
--    elimina 3 "abcd"  ==  ["a","b","c","d"]
--    elimina 4 "abcd"  ==  [""]
--    elimina 5 "abcd"  ==  []
--    elimina 6 "abcd"  ==  []

Soluciones

-- 1ª solución:
elimina1 :: Int -> [a] -> [[a]]
elimina1 0 xs     = [xs]
elimina1 n []     = []
elimina1 n (x:xs) = [x:ys | ys <- elimina1 n xs] ++ elimina1 (n-1) xs
 
-- 2ª solución:
elimina2 :: Int -> [a] -> [[a]]
elimina2 n xs = [ys | ys <- subsequences xs, length ys == k]
    where k = length xs - n

Referencia

El ejercicio está basado en el problema del 5 de junio de 2014 de 1HaskellADay.

Medio

Una solución de “Eliminación de n elementos

  1. Paco Jácome
    elimina :: Int -> [a] -> [[a]]
    elimina n xs = [ys | ys <- subsequences xs, length ys == k]
                   where k = length xs - n

    Nota:

    *Main> elimina 2 “abcd” == [“ab”,”ac”,”ad”,”bc”,”bd”,”cd”]
    False
    *Main> sort (elimina 2 “abcd”) == [“ab”,”ac”,”ad”,”bc”,”bd”,”cd”]
    True

Escribe tu solución

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.