La codificación de Luka
En el problema Kemija se utiliza la codificación de Luka consistente en añadir detrás de cada vocal la letra ‘p’ seguida de la vocal. Por ejemplo, la palabra «elena» se codifica como «epelepenapa» y «luisa» por «lupuipisapa».
Definir las funciones
1 2 |
codifica :: String -> String decodifica :: String -> String |
tales que
+ (codifica cs) es la codificación de Luka de la cadena cs. Por ejemplo,
1 2 3 4 |
λ> codifica "elena admira a luisa" "epelepenapa apadmipirapa apa lupuipisapa" λ> codifica "todo para nada" "topodopo paparapa napadapa" |
- (decodifica cs) es la decodificación de Luka de la cadena cs. Por ejemplo,
1 2 3 4 |
λ> decodifica "epelepenapa apadmipirapa apa lupuipisapa" "elena admira a luisa" λ> decodifica "topodopo paparapa napadapa" "todo para nada" |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 |
codifica :: String -> String codifica "" = "" codifica (c:cs) | esVocal c = c : 'p' : c : codifica cs | otherwise = c : codifica cs esVocal :: Char -> Bool esVocal c = c `elem` "aeiou" decodifica :: String -> String decodifica "" = "" decodifica (c:cs) | esVocal c = c : decodifica (drop 2 cs) | otherwise = c : decodifica cs |
La función decodifica no es correcta, falla el caso en que el mensaje acabe en consonante:
En la función decodifica faltan casos base.