domingo, 14 de junio de 2020

JavaScript: cifrado zigzag

Hoy, echaremos otro vistazo al cifrado zigzag y veremos una manera de programarlo en JavaScript.

El algoritmo a seguir será el siguiente: crearemos dos cadenas de texto vacías e iremos recorriendo nuestro texto plano letra por letra. Así, escribiremos alternativamente en las dos cadenas las letras que encontramos. Por último, solo tenemos que concatenar las cadenas de texto y ya tendremos el resultado.

Para no complicar el código con demasiados condicionales, podemos usar un pequeño truco: cuando iteremos sobre la variable "texto", podemos tomar simultáneamente las dos letras que queremos para las dos cadenas. Es decir, si nos encontramos en la posición i, la letra i irá a la primera cadena y la i+1, a la segunda. Así, en cada paso aumentamos dos posiciones y nos ahorramos tener que chequear la paridad de i para saber a qué cadena debemos enviar la letra.

function cifrar(texto){
   var texto1 = "", texto2 = "", i, len = texto.length;
   for(i = 0; i < len; i+=2){
      texto1 += texto.charAt(i);
      texto2 += texto.charAt(i+1);
   }
   var result = texto1 + texto2;
   return result;
}


El último paso, "result = texto1 + texto2" es la concatenación de las dos variables.

Para descifrar, el código también será muy sencillo. El algoritmo utilizado es: calculamos dónde está el punto medio del texto y partimos por allí (si hay un número par de letras, el resultado será entero y coincidirá con la mitad; si es impar, al dividir entre 2, obtendremos .5, y al partir los textos JavaScript tomará desde el siguiente valor entero, que es justo lo que queremos). Una vez hemos dividido el texto en dos, tomamos letras alternativamente de uno y otro.

function descifrar(texto){
   var len = texto.length, len2 = (len + 1)/2, texto1 = texto.substring(0,len2), texto2 = texto.substring(len2,len);
   var result = "", i;
   for(i = 0; i < len2; i++){
      result += texto1.charAt(i) + texto2.charAt(i);
   }
   return result;
}


En el bucle, hemos ido recorriendo "texto1" y "texto2" a la vez y tomado sus iésimas letras. Así, aseguramos esa alternancia que mencionábamos antes.

A continuación, puedes probar tú mismo el programa que hemos visto. Escribe el texto con el que quieras trabajar y elige si quieres cifrar (deja la casilla marcada) o descifrar (desmarca la casilla). Cuando estés listo, dale al botón para ver el resultado.

Aquí, he usado la segunda versión del cifrado, teniendo en cuenta los espacios entre las palabras. Para la versión sin espacios, habría que añadir una línea de código como "texto = texto.replace(/\s/g, '');", para borrarlos.

TEXTO  CIFRAR





No hay comentarios:

Publicar un comentario