Bueno ahora que tenia la cabeza fresca me puse a hacer el descifrado que es la unica parte que me quedaba y aqui dejo mi alternativa tambien de 5 lineas (cifrado y descifrado)
Código: Seleccionar todo
alfaMorse = [".- ", "-... ", "-.-. ", "-.. ", ". ","..-. ", "--. ", ".... ", ".. ", ".--- ", "-.- ", ".-.. ", "-- ", "-. ", "--- ", ".--. ", "--.- ", ".-. ", "... ", "- ", "..- ", "...- ",".-- ", "-..- ", "-.-- ", "--.. ", "----- ",".---- ", "..--- ", "...-- ", "....- ", "..... ", "-.... ", "--... ","---.. ", "----. ", ".-.-.- ", "--..-- ", "..--.. ", "-....- ", "-.-.-- ", "---... ", "-.-.-. ", "-.--. ", "-.--.- ", "-...- ", "...-..- ", ".--.-. ","..--.- ", ".-.-. ", ".-... ", "...-.- ", "/ ", ".----. "]
morse [] = []
morse (x:xs) = [alfaMorse !! i |(s,i) <- zip (['a'..'z']++['0'..'9']++".,?-!:;()=$@_+~# '") [0..53],x == s]++morse xs
desMorse [] = []
desMorse (x:xs) = [(['A'..'Z']++['0'..'9']++".,?-!:;()=$@_+~# '") !! i | (s,i) <- zip alfaMorse [0..53],x == s]++desMorse xs
Agradezco a sanko el haber estado atento a todas mis dudas y prestarme su ayuda, por ejemplo nunca se me ocurrio usar zip en las listas intencionales, un saludo maquina
Muestra:
Código: Seleccionar todo
GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
[1 of 1] Compiling Main ( C:\Documents and Settings\Strup\Escritorio
\morse.hs, interpreted )
Ok, modules loaded: Main.
*Main> morse "puta zorra"
[".--. ","..- ","- ",".- ","/ ","--.. ","--- ",".-. ",".-. ",".- "]
*Main> putStrLn (desMorse [".--. ","..- ","- ",".- ","/ ","--.. ","--- ",".-. ",".-. ",".- "])
PUTA ZORRA
*Main>
Abolición para el torneo del toro de la vega. Death to the murderers of bulls.