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" == [] |
-- 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 |
-- 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.
Se puede imprimir o compartir con
Nota:
*Main> elimina 2 “abcd” == [“ab”,”ac”,”ad”,”bc”,”bd”,”cd”]
False
*Main> sort (elimina 2 “abcd”) == [“ab”,”ac”,”ad”,”bc”,”bd”,”cd”]
True