Dígitos visibles y ocultos
Una cadena clave es una cadena que contiene dígitos visibles y ocultos. Los dígitos se ocultan mediante las primeras letras minúsculas: la ‘a’ oculta el ‘0’, la ‘b’ el ‘1’ y así sucesivamente hasta la ‘j’ que oculta el ‘9’. Los restantes símbolos de la cadena no tienen significado y se pueden ignorar.
Definir la función
| 1 |    numeroOculto :: String -> Maybe Integer | 
tal que (numeroOculto cs) es justo el número formado por los dígitos visibles u ocultos de la cadena clave cs, si cs tiene dígitos y Nothing en caso contrario. Por ejemplo,
| 1 2 3 4 5 6 7 |    numeroOculto "jihgfedcba"            ==  Just 9876543210    numeroOculto "JIHGFEDCBA"            ==  Nothing    numeroOculto "el 23 de Enero"        ==  Just 423344    numeroOculto "El 23 de Enero"        ==  Just 23344    numeroOculto "El 23 de enero"        ==  Just 233444    numeroOculto "Todo para nada"        ==  Just 300030    numeroOculto (replicate (10^6) 'A')  ==  Nothing | 
Soluciones
| 1 2 3 4 5 6 7 8 9 10 11 | import Data.Char (isDigit, ord, chr) numeroOculto :: String -> Maybe Integer numeroOculto cs | null aux  = Nothing                 | otherwise = Just (read aux)     where aux = filter isDigit (map visible cs) visible :: Char -> Char visible c | c `elem` ['a'..'j'] = chr (ord c - n)           | otherwise           = c           where n = ord 'a' - ord '0' |