Guest User

Untitled

a guest
Jan 22nd, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.21 KB | None | 0 0
  1. $alfabeto_mayusculas = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  2. $alfabeto_minusculas = "abcdefghijklmnopqrstuvwxyz"
  3. $longitud_alfabeto = 26
  4. $limite_inferior_mayusculas = 65
  5. $limite_inferior_minusculas = 97
  6.  
  7. =begin
  8. Rotar una cadena determinadas posiciones
  9. usando el cifrado César
  10.  
  11. @author parzibyte
  12.  
  13. La cadena es el mensaje a cifrar o descrifrar
  14.  
  15. Las rotaciones indican el número de rotaciones con el que se cifra o descifra
  16.  
  17. La orientación indica si estamos rotando hacia la derecha (codificando)
  18. o hacia la izquierda (decodificando). Los valores pueden ser 1 o -1;
  19. por defecto es 1 (derecha)
  20. =end
  21. def cesar(cadena, rotaciones, orientacion = 1)
  22.  
  23. cadena_con_rotaciones = ""
  24. # Ir letra por letra...
  25. for letra in cadena.chars
  26. # Si no es una letra (es un espacio, punto, etcétera) entonces
  27. # no la rotamos ni cambiamos, ponemos el carácter así como es
  28. if !letra.match(/^[[:alpha:]]$/)
  29. cadena_con_rotaciones += letra
  30. next
  31. end
  32. # Suponemos que la letra es mayúscula
  33. alfabeto = $alfabeto_mayusculas
  34. limite = $limite_inferior_mayusculas
  35. # Pero comprobamos y cambiamos si es necesario
  36. if letra == letra.downcase # ¿Es minúscula?
  37. alfabeto = $alfabeto_minusculas
  38. limite = $limite_inferior_minusculas
  39. end
  40.  
  41. valor_ascii = letra.ord
  42. # Saber si rotamos hacia la izquierda o derecha, así se suma o resta dependiendo de la orientación
  43. rotaciones_verdaderas = rotaciones * orientacion
  44. # Rotar
  45. nueva_posicion = (valor_ascii - limite + rotaciones_verdaderas) % $longitud_alfabeto
  46. # Y ver cuál carácter está en esa posición
  47. cadena_con_rotaciones += alfabeto[nueva_posicion]
  48. end
  49. # Regresar nueva cadena
  50. cadena_con_rotaciones
  51. end
  52.  
  53. mensaje = "Programando en Ruby desde parzibyte.me"
  54. rotaciones = 5
  55. puts "El mensaje original es '#{mensaje}'. Lo vamos a rotar #{rotaciones} posiciones"
  56. # El mensaje original es 'Programando en Ruby desde parzibyte.me'. Lo vamos a rotar 5 posiciones
  57. mensaje_cifrado = cesar(mensaje, rotaciones)
  58. puts "El mensaje cifrado es '#{mensaje_cifrado}'"
  59. # El mensaje cifrado es 'Uwtlwfrfsit js Wzgd ijxij ufwengdyj.rj'
  60. mensaje_descifrado = cesar(mensaje_cifrado, rotaciones, -1)
  61. puts "El mensaje descifrado es '#{mensaje_descifrado}'"
  62. # El mensaje descifrado es 'Programando en Ruby desde parzibyte.me'
Add Comment
Please, Sign In to add comment