Exercitium1-0.1.0.0: Problemas de Exercitium (Volumen 1)

CopyrightExercitium (11-05-14)
LicenseGPL-3
MaintainerJoseA.Alonso@gmail.com
Safe HaskellSafe
LanguageHaskell2010

Elimina_unitarias

Description

Eliminación de las ocurrencias unitarias

Definir la función

eliminaUnitarias :: Char -> String -> String

tal que (eliminaUnitarias c cs) es la lista obtenida eliminando de la cadena cs las ocurrencias unitarias del carácter c (es decir, aquellas ocurrencias de c tales que su elemento anterior y posterior es distinto de c). Por ejemplo,

>>> eliminaUnitarias 'X' ""
""
>>> eliminaUnitarias 'X' "X"
""
>>> eliminaUnitarias 'X' "XX"
"XX"
>>> eliminaUnitarias 'X' "XXX"
"XXX"
>>> eliminaUnitarias 'X' "abcd"
"abcd"
>>> eliminaUnitarias 'X' "Xabcd"
"abcd"
>>> eliminaUnitarias 'X' "XXabcd"
"XXabcd"
>>> eliminaUnitarias 'X' "XXXabcd"
"XXXabcd"
>>> eliminaUnitarias 'X' "abcdX"
"abcd"
>>> eliminaUnitarias 'X' "abcdXX"
"abcdXX"
>>> eliminaUnitarias 'X' "abcdXXX"
"abcdXXX"
>>> eliminaUnitarias 'X' "abXcd"
"abcd"
>>> eliminaUnitarias 'X' "abXXcd"
"abXXcd"
>>> eliminaUnitarias 'X' "abXXXcd"
"abXXXcd"
>>> eliminaUnitarias 'X' "XabXcdX"
"abcd"
>>> eliminaUnitarias 'X' "XXabXXcdXX"
"XXabXXcdXX"
>>> eliminaUnitarias 'X' "XXXabXXXcdXXX"
"XXXabXXXcdXXX"
>>> eliminaUnitarias 'X' "XabXXcdXeXXXfXx"
"abXXcdeXXXfx"

Synopsis

Documentation

eliminaUnitarias :: Char -> String -> String Source #

1ª solución (por comprensión).

eliminaUnitarias2 :: Char -> String -> String Source #

2ª solución (por composición).

eliminaUnitarias3 :: Char -> String -> String Source #

3ª solución (por recursión).

eliminaUnitarias4 :: Char -> String -> String Source #

4ª solución (por recursión con acumuladores).

eliminaUnitarias5 :: Char -> String -> String Source #

5ª solución (con índices).

eliminaUnitarias6 :: Char -> String -> String Source #

6ª solución (por recursión con span).

prop_equiv_eliminaUnitarias :: Char -> String -> Bool Source #

(prop_equiv_eliminaUnitarias c cs) se verifica si las definiciones de eliminaUnitarias son equivalentes sobre c y cs. Por ejemplo,

>>> prop_equiv_eliminaUnitarias 'X' "XabXXcdXeXXXfXx"
True

verifica_equiv_eliminaUnitarias :: IO () Source #

Comprueba la equivalencia de las definiciones de eliminaUnitarias.

>>> verifica_equiv_eliminaUnitarias
+++ OK, passed 100 tests.

Comparación de eficiencia

> length (eliminaUnitarias5 '3' (show (2^100000)))
27599
(2.13 secs, 15,602,672 bytes)
> length (eliminaUnitarias '3' (show (2^100000)))
27599
(0.02 secs, 14,934,296 bytes)
> length (eliminaUnitarias '3' (show (2^10000000)))
2766278
(1.94 secs, 1,465,644,920 bytes)
> length (eliminaUnitarias2 '3' (show (2^10000000)))
2766278
(1.40 secs, 1,231,149,824 bytes)
> length (eliminaUnitarias3 '3' (show (2^10000000)))
2766278
(1.69 secs, 918,640,064 bytes)
> length (eliminaUnitarias4 '3' (show (2^10000000)))
2766278
(2.03 secs, 797,135,176 bytes)
> length (eliminaUnitarias6 '3' (show (2^10000000)))
2766278
(1.52 secs, 938,221,096 bytes)