Gracias a overxfl0w que me estuvo ayudando con la recursividad de haskell pude acabar el cifrado:

Código: Seleccionar todo

import Data.Char

xEnc x y = ['a'..'z'] !! (((x + y) `mod` 26 ))
xDec x y = ['a'..'z'] !! (((x - y) `mod` 26 ))

encFinal :: String -> Int -> String
encFinal [] y = ""
encFinal (x:xs) y = (xEnc ((ord x)-97) y):(encFinal xs y)

decFinal :: String -> Int -> String
decFinal [] y = ""
decFinal (x:xs) y = (xDec ((ord x)-97) y):(decFinal xs y)
Saludos.
PD : Over, maquina
me gusta el codigo aunque no lo consiga comprender por mas que lo lea, por cierto de lujo un saludo
Abolición para el torneo del toro de la vega. Death to the murderers of bulls.
Dejo aqui una pequeña mejora, se aprovechan mejor las intensionales:

Código: Seleccionar todo

module Cesar where
	import Data.Char
	xEnc :: String -> Int -> String
	xEnc z y = [chr ((ord x + y) `mod` 256) | x <- z]

	xDec :: String -> Int -> String
	xDec z y = [chr ((ord x - y) `mod` 256) | x <- z]
aqui va mi alternativa

Código: Seleccionar todo

import Data.Char (isSpace,toUpper)
import Data.List (elemIndices)

cesar [] ys = []
cesar (x:xs) ys |isSpace x = x:cesar xs ys |otherwise = [['a'..'z'] !!(((elemIndices (toUpper x) ['A'..'Z']!! 0)+ys) `mod` 26)]++cesar xs ys

dCesar [] ys = []
dCesar (x:xs) ys |isSpace x = x:dCesar xs ys |otherwise = [['a'..'z'] !!(((elemIndices (toUpper x) ['A'..'Z']!! 0)-ys) `mod` 26)]++dCesar xs ys
pastebin:[Enlace externo eliminado para invitados]

Muestra:

Código: Seleccionar todo

Strup@belistrup ~
$ ghci cesar
WARNING: GHCi invoked via 'ghci.exe' in *nix-like shells (cygwin-bash, in particular)
         doesn't handle Ctrl-C well; use the 'ghcii.sh' shell wrapper instead
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             ( cesar.hs, interpreted )
Ok, modules loaded: Main.
*Main> putStrLn.cesar "beli strup" $ 29
ehol vwuxs
*Main>
*Main> putStrLn.dCesar "ehol vwuxs" $ 29
beli strup
espero os guste el code un saludo
PD: Buena tu mejora sanko
Abolición para el torneo del toro de la vega. Death to the murderers of bulls.
Bueno ya que sanko mejoro la suya yo tambien me anime y la mejore un poco bastante

Código: Seleccionar todo

import Data.Char (isSpace,toUpper)
import Data.List (elemIndices)

cesar xs ys = foldr (\x -> \y -> if isSpace x then x:y else ['a'..'z'] !! (((elemIndices (toUpper x) ['A'..'Z']!! 0)+ys)`mod` 26):y)[] xs
dcesar xs ys = foldr (\x -> \y -> if isSpace x then x:y else ['a'..'z'] !! (((elemIndices (toUpper x) ['A'..'Z']!! 0)-ys)`mod` 26):y)[] xs
pastebin: [Enlace externo eliminado para invitados]

Muestra:

Código: Seleccionar todo

"ghci>" :load "cesar.hs"
[1 of 1] Compiling Main             ( cesar.hs, interpreted )
Ok, modules loaded: Main.
"ghci>" putStrLn.cesar "beli Strup" $ 29
ehol vwuxs
"ghci>" putStrLn.dcesar "ehol vwuxs" $ 29
beli strup
esta vez hice uso de las lambdas y de la funcion de pliegue foldr para que asi me saliese en una sola linea
un Saludo foro
Abolición para el torneo del toro de la vega. Death to the murderers of bulls.
Responder

Volver a “Fuentes”