• Publicidad

[RETO] Cifrado Cesar

Aprende Perl

[RETO] Cifrado Cesar

Notapor BigBear » 2014-02-09 14:26 @643

Tras la inesperada y poco práctica victoria en el anterior reto me veo forzado a proponer un reto debido a la repentina nueva regla de Aceitunas de que el que ganara propusiera un nuevo reto.

El reto consiste en realizar un script que pueda realizar el cifrado y descifrado Cesar de un string que contiene una palabra cualquiera.

¿ Qué les parece ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: [RETO] Cifrado Cesar

Notapor Aceitunas » 2014-02-09 15:38 @693

Cifra mayúsculas, tal cual sale en la Wikipedia, rotando 3 posiciones:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # Cifrado cesar
  2. # Aceitunas
  3. # http://www.perlenespanol.com
  4.  
  5. use v5.16;
  6.  
  7. my $cadena = "ABCDZ";
  8.  
  9. say Cifrado_Cesar($cadena,1);
  10.  
  11. exit;
  12.  
  13. sub Cifrado_Cesar # Cifrado_Cesar(char * cadena, int CifrarDescifrar)  -> Cifrar 1, descifrar 0.
  14. {
  15.     my @c = split(//,$_[0]);
  16.  
  17.     for my $i (0..$#c)
  18.     {
  19.         if ($_[1] == 1)
  20.         {
  21.             $c[$i] = ord($c[$i]) + 3;
  22.         }else{
  23.             $c[$i] = ord($c[$i]) - 3;
  24.         }
  25.                
  26.         if ($c[$i] > 90 || $c[$i] < 65)
  27.         {
  28.             if ($_[1] == 1)
  29.             {
  30.                 $c[$i] = chr($c[$i] - 26);
  31.             }else{
  32.                 $c[$i] = chr($c[$i] + 26);
  33.             }
  34.         }else{
  35.             $c[$i] = chr $c[$i];
  36.         }
  37.     }
  38.    
  39.     return join("",@c);
  40. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


http://es.wikipedia.org/wiki/Cifrado_C%C3%A9sar

Creo que se puede hacer con una expresión regular, voy a probar.
Última edición por Aceitunas el 2014-02-09 17:59 @791, editado 2 veces en total
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.

Re: [RETO] Cifrado Cesar

Notapor BigBear » 2014-02-09 15:41 @695

Yo acabo de hacer este :

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # !usr/bin/perl
  2. # Cifrado Cesar
  3. # Escrito por Doddy H para el reto de perlenespanol
  4.  
  5. $texto = "hola hola";
  6. #$texto = "krod krod";
  7.  
  8. print cifrado_cesar($texto);
  9. #print descifrado_cesar($texto);
  10.  
  11. sub cifrado_cesar {
  12.  
  13. my @re;
  14.  
  15. @letras = split (//,$_[0]);
  16.  
  17. for my $letra(@letras) {
  18.        
  19. if($letra ne " ") {
  20.        
  21. $letrafinal = chr(ord($letra)+3);
  22.  
  23. $letrafinal=~s/{/a/;
  24. $letrafinal=~s/\|/b/;
  25. $letrafinal=~s/}/c/;
  26.  
  27. push(@re,$letrafinal);
  28.  
  29. } else {
  30. push(@re," ");
  31. }
  32. }
  33.  
  34. return @re;
  35.  
  36. }
  37.  
  38. sub descifrado_cesar($texto) {
  39.  
  40. my @re;
  41.  
  42. @letras = split (//,$_[0]);
  43.  
  44. for my $letra(@letras) {
  45.  
  46. if($letra ne " ") {
  47.  
  48. $letrafinal = chr(ord($letra)-3);
  49.  
  50. $letrafinal=~s/\^/x/;
  51. $letrafinal=~s/_/y/;
  52. $letrafinal=~s/`/z/;
  53.  
  54. push(@re,$letrafinal);
  55.  
  56. } else {
  57. push(@re," ");
  58. }
  59. }
  60.  
  61. return @re;
  62.        
  63. }
  64.  
  65. # The End ?
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: [RETO] Cifrado Cesar

Notapor explorer » 2014-02-09 17:48 @783

Cambiar unas letras por otras, es lo que en Perl llamamos 'transliteración', y para ello contamos con la función tr:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $texto = "Los celtas atacaron de madrugada";
  2.  
  3. ## codificación
  4. $texto = lc $texto;           # todo a minúsculas
  5. $texto =~ tr/a-z/k-za-j/;
  6. say $texto;                   # vyc movdkc kdkmkbyx no wknbeqknk
  7.  
  8. ## descodificación
  9. $texto =~ tr/k-za-j/a-z/;
  10. say $texto;                   # los celtas atacaron de madrugada
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: [RETO] Cifrado Cesar

Notapor BigBear » 2014-03-18 10:28 @478

Bueno, teóricamente parece que ganó aceitunas :?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: [RETO] Cifrado Cesar

Notapor Aceitunas » 2014-03-28 16:38 @735

A ver si saco un rato y pongo otro, que últimamente estoy muy liado...
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.

Re: [RETO] Cifrado Cesar

Notapor BigBear » 2014-03-29 13:30 @604

No te preocupes, tenés tiempo, tenés hasta antes de la medianoche de este día :twisted:
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818


Volver a Formación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado