que decir, un code precioso

Código: Seleccionar todo

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

vigenere :: String -> String -> String
vigenere [] _ = []
vigenere (x:xs)(y:ys)
	|x == ' ' = ' ':vigenere xs ([y]++ys)
	|y == ' ' = vigenere ([x]++xs) ys 
	|otherwise = ['a'..'z'] !! (foldl(+) 0 (concat[elemIndices (toUpper x)['A'..'Z'],elemIndices (toUpper y) ['A'..'Z']])`mod`26):vigenere xs (ys++[y])

desVigenere :: String -> String -> String
desVigenere [] _ = []
desVigenere (x:xs)(y:ys)
	|x == ' ' = ' ':desVigenere xs ([y]++ys)
	|y == ' ' = desVigenere ([x]++xs) ys 
	|otherwise = ['a'..'z'] !! (foldr(-) 0 (concat[elemIndices(toUpper x)['A'..'Z'],elemIndices(toUpper y)['A'..'Z']])`mod`26):desVigenere xs (ys++[y])
Muestra:

Código: Seleccionar todo

Strup@belistrup ~
$ ghci vigenere
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             ( vigenere.hs, interpreted )
Ok, modules loaded: Main.
*Main> vigenere "con los dedos de las manos y los dedos de los pies los cojones y la polla todo suma veintitres" "beli strup"
"dsy tgl uyspw om dtj gposd g dhj xtesd lw efm ejid tgl tiyprpa q er jdmpl bgwf mjne gmagkcisid"
*Main>
*Main> desVigenere "dsy tgl uyspw om dtj gposd g dhj xtesd lw efm ejid tgl tiyprpa q er jdmpl bgwf mjne gmagkcisid" "beli strup"
"con los dedos de las manos y los dedos de los pies los cojones y la polla todo suma veintitres"
*Main>
pastebin:[Enlace externo eliminado para invitados]
podria haberlo hecho en dos lineas pero quise implementarle el quitado automatico de espacios en la clave y demas cosas para que quede como el mismisimo vigenere original, espero os guste el code un saludo
Abolición para el torneo del toro de la vega. Death to the murderers of bulls.
Responder

Volver a “Fuentes”