Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $alfabeto_mayusculas = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- $alfabeto_minusculas = "abcdefghijklmnopqrstuvwxyz"
- $longitud_alfabeto = 26
- $limite_inferior_mayusculas = 65
- $limite_inferior_minusculas = 97
- =begin
- Rotar una cadena determinadas posiciones
- usando el cifrado César
- @author parzibyte
- La cadena es el mensaje a cifrar o descrifrar
- Las rotaciones indican el número de rotaciones con el que se cifra o descifra
- La orientación indica si estamos rotando hacia la derecha (codificando)
- o hacia la izquierda (decodificando). Los valores pueden ser 1 o -1;
- por defecto es 1 (derecha)
- =end
- def cesar(cadena, rotaciones, orientacion = 1)
- cadena_con_rotaciones = ""
- # Ir letra por letra...
- for letra in cadena.chars
- # Si no es una letra (es un espacio, punto, etcétera) entonces
- # no la rotamos ni cambiamos, ponemos el carácter así como es
- if !letra.match(/^[[:alpha:]]$/)
- cadena_con_rotaciones += letra
- next
- end
- # Suponemos que la letra es mayúscula
- alfabeto = $alfabeto_mayusculas
- limite = $limite_inferior_mayusculas
- # Pero comprobamos y cambiamos si es necesario
- if letra == letra.downcase # ¿Es minúscula?
- alfabeto = $alfabeto_minusculas
- limite = $limite_inferior_minusculas
- end
- valor_ascii = letra.ord
- # Saber si rotamos hacia la izquierda o derecha, así se suma o resta dependiendo de la orientación
- rotaciones_verdaderas = rotaciones * orientacion
- # Rotar
- nueva_posicion = (valor_ascii - limite + rotaciones_verdaderas) % $longitud_alfabeto
- # Y ver cuál carácter está en esa posición
- cadena_con_rotaciones += alfabeto[nueva_posicion]
- end
- # Regresar nueva cadena
- cadena_con_rotaciones
- end
- mensaje = "Programando en Ruby desde parzibyte.me"
- rotaciones = 5
- puts "El mensaje original es '#{mensaje}'. Lo vamos a rotar #{rotaciones} posiciones"
- # El mensaje original es 'Programando en Ruby desde parzibyte.me'. Lo vamos a rotar 5 posiciones
- mensaje_cifrado = cesar(mensaje, rotaciones)
- puts "El mensaje cifrado es '#{mensaje_cifrado}'"
- # El mensaje cifrado es 'Uwtlwfrfsit js Wzgd ijxij ufwengdyj.rj'
- mensaje_descifrado = cesar(mensaje_cifrado, rotaciones, -1)
- puts "El mensaje descifrado es '#{mensaje_descifrado}'"
- # El mensaje descifrado es 'Programando en Ruby desde parzibyte.me'
Add Comment
Please, Sign In to add comment