diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4c2095a --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.eslintrc diff --git a/README.md b/README.md index e2577d6..1a2eb39 100644 --- a/README.md +++ b/README.md @@ -1,57 +1 @@ -# Cifrado César - -> Recuerda seguir siempre esta [guía de estilos](https://github.com/Laboratoria/js-style-guide/) - -Crea una web que pida, por medio de un `prompt()`, una frase al usuario y -devuelva el mismo mensaje encriptado según el -[algoritmo de Cifrado César](https://en.wikipedia.org/wiki/Caesar_cipher) -con el parámetro de desplazamiento de **33 espacios hacia la derecha** - -Por ejemplo: - -- Texto original: `ABCDEFGHIJKLMNOPQRSTUVWXYZ` -- Texto codificado: `HIJKLMNOPQRSTUVWXYZABCDEFG` - -## Entregables - -Para cada producto debes entregar **un repositorio de GitHub** que -contenga: -1. Archivo `README.md` que explique el **pseudocódigo** de tu solución y su -**diagrama de flujo** -2. Archivo `app.js` con el **código** de tu solución -3. Archivo `index.html` vinculado con tu `app.js` - -## Tips - -A continuación un video de Michelle que te lleva a través de la fórmula -matemática del Cifrado César y un par de cosas más que debes saber para -resolver este reto. ¡Escúchala con detenimiento y sigue sus consejos! :) - -[![tips caesar cipher](https://img.youtube.com/vi/zd8eVrXhs7Y/0.jpg)](https://www.youtube.com/watch?v=zd8eVrXhs7Y) - -También te compartimos más información de lo que Michelle te ha explicado -en el video anterior: - -- [Aprende más sobre `charCodeAt()`](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/String/charCodeAt) -- [Aprende más sobre `String.fromCharCode()`](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/String/fromCharCode) -- [Aprende más sobre `ASCII`](http://conceptodefinicion.de/ascii/) - -## Consideraciones específicas - -1. Tu programa debe ser capaz de cifrar y descifrar tanto letras - mayúsculas como minúsculas. La fórmula para descifrar es: `(x - n) % 26` -2. Tu código debe estar compuesto por 2 funciones con los siguientes - nombres: `cipher` y `decipher` -3. El usuario no debe poder ingresar un campo vacío o que contenga números - -## Criterios de evaluación - -Se tomarán en cuenta las siguientes consideraciones a la hora de evaluar tu solución: - -1. Nombramiento de variables -2. Indentación -3. Validación de input: el usuario no debe poder ingresar un campo vacío o de tipo que no corresponda -4. Estructura de tus archivos -5. Archivo `README.md` correctamente redactado -6. Uso de comentarios para hacer tu código más legible -7. Que el programa cumpla con el propósito requerido +# cipherCaesar diff --git a/index.html b/index.html new file mode 100644 index 0000000..04193fe --- /dev/null +++ b/index.html @@ -0,0 +1,12 @@ + + + + + Cipher Caesar + + + + + diff --git a/js/app.js b/js/app.js new file mode 100644 index 0000000..655362d --- /dev/null +++ b/js/app.js @@ -0,0 +1,57 @@ +var space = 33; +var numberLetters = 26; +var reg = /^5[8-9]|6[0-4]|9[1-7]|12[3-9]|1[3-9][0-9]|2[0-5][0-5]$/; // rango de valores en la tabla ascii que no son letras + +function cipher(str) { + var strCipher = ''; + for (var i = 0; i < str.length; i++) { + var codeChar = str.charCodeAt(i); + var newCodeChar = (codeChar - codeChar + space) % numberLetters + codeChar; // Obtiene el nuevo codigo ascii de la letra ingresada + // Verifica que la variable newCodeChar no esté en el rango de la variable reg, Sí está en el rango le resta el número de letras para volver al principio (A-a). + reg.test(newCodeChar) ? (newCodeChar -= numberLetters, strCipher += String.fromCharCode(newCodeChar)) : strCipher += String.fromCharCode(newCodeChar); + } + return strCipher; +} + +function deCipher(str) { + var strDecipher = ''; + for (var i = 0; i < str.length; i++) { + var codeChar = str.charCodeAt(i); + var newCodeChar = codeChar - (space % numberLetters); // Le quita los 7 espacios para decifrar, pero si está en el rango de "reg", le suma 26 para volver a iniciar (A-a) + reg.test(newCodeChar) ? (newCodeChar += numberLetters, strDecipher += String.fromCharCode(newCodeChar)) : (strDecipher += String.fromCharCode(newCodeChar)); + } + return strDecipher; +} + +function isValidate(str) { // Verifica que la entrada no sea un número o esté vacío + var regexp = /^[A-Z]|[a-z]$/; + var state; + for (var i = 0; i < input.length; i++) { + if (regexp.test(input[i]) === false || str.length === 0) { + state = false; + } else { + state = true; + } + } + return state; +} + +do { + var op = 0; + var state; + var input = prompt('Ingrese un texto: '); + if (isValidate(input)) { + document.write('El texto ingresado es: ' + input + '\n'); + var strMenu = '1. Cifrar\n2. Decifrar\n'; + op = parseInt(prompt(strMenu)); + if (op === 1) { + document.write('
' + 'El texto cifrado es ' + cipher(input)); + } else if (op === 2) { + document.write('
' + 'El texto decifrado es ' + deCipher(input)); + } else { + document.write('Ha ingresado una opción inválida'); + } + } else { + alert('Ingrese un texto valido'); + } +} while (!isValidate(input));