Ir al contenido principal

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

codifica   :: String -> String
decodifica :: String -> String

tales que + (codifica cs) es la codificación de Luka de la cadena cs. Por ejemplo,

λ> 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,
λ> decodifica "epelepenapa apadmipirapa apa lupuipisapa"
"elena admira a luisa"
λ> decodifica "topodopo paparapa napadapa"
"todo para nada"

Soluciones

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