Eliminación de n elementos
Enunciado
1 2 3 4 5 6 7 8 9 10 11 |
-- 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 2 3 4 5 6 7 8 9 10 |
-- 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.