diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..fbb5dc3 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,29 @@ +{ + "parserOptions": { + "ecmaVersion": 6 + }, + "rules": { + "keyword-spacing": 1, + "space-before-function-paren": [1, "never"], + "eqeqeq": 1, + "space-infix-ops": 1, + "comma-spacing": 1, + "brace-style": 1, + "no-multiple-empty-lines": 1, + "camelcase": 1, + "func-call-spacing": 1, + "key-spacing": 1, + "semi": 1, + "no-floating-decimal": 1, + "no-multi-spaces": 1, + "object-property-newline": 1, + "padded-blocks": [1, "never"], + "space-before-blocks": 1, + "space-in-parens": 1, + "spaced-comment": 1, + "quotes": [1, "single"], + "id-length": [1, { "exceptions": ["i", "j", "x"] }], + "indent": [1, 2], + "no-array-constructor": 1 + } +} diff --git a/README.md b/README.md index e2577d6..1509bd2 100644 --- a/README.md +++ b/README.md @@ -1,57 +1,84 @@ -# Cifrado César +# **Cifrado Cesar** -> Recuerda seguir siempre esta [guía de estilos](https://github.com/Laboratoria/js-style-guide/) +## Objetivo -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** +Realizar el cifrado y descifrado de una *palabra* por medio de este programa. -Por ejemplo: +Utilizamos el **Algoritmo de Cesar** para que letra por letra se pueda cifrar el parametro ingresado. -- Texto original: `ABCDEFGHIJKLMNOPQRSTUVWXYZ` -- Texto codificado: `HIJKLMNOPQRSTUVWXYZABCDEFG` - -## Entregables ++ Texto original: ABCDEFGHIJKLMNOPQRSTUVWXYZ -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` ++ Texto codificado: HIJKLMNOPQRSTUVWXYZABCDEFG +_________________________________________________ -## Tips +### *PseudoCodigo:* -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! :) +~~~ +Algoritmo Cifrado de César -[![tips caesar cipher](https://img.youtube.com/vi/zd8eVrXhs7Y/0.jpg)](https://www.youtube.com/watch?v=zd8eVrXhs7Y) +INICIO -También te compartimos más información de lo que Michelle te ha explicado -en el video anterior: +Función cipher(message) + newString <- message.toUpperCase() +Para (j = 0; j < newString.length; j++) +Si newString[j] >= 65 y newString <= 90 Entonces +positionAlphabetAscii <- newString[j].charCodeAt() +newPositionEncript <- aplicamos formula de cifrado de cesar a positionAlphabetAscii +encriptWord += newPositionEncript +~~~ -- [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/) +~~~ +Si no Entonces +encriptWord <- alert('Solo se aceptan letras. Intentalo nuevamente!') +Fin Si +Fin Para -## Consideraciones específicas +Retornar encriptWord -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 +Fin Función +~~~ -## Criterios de evaluación +~~~ +Función decipher(message) +newString <- message.toUpperCase() +Para (j = 0; j < newString.length; j++) +Si newString[j] >= 65 y newString <= 90 Entonces +positionAlphabetAscii <- newString[j].charCodeAt() +newPositionEncript <- aplicamos formula de decifrado de cesar a positionAlphabetAscii +encriptWord += newPositionEncript +~~~ -Se tomarán en cuenta las siguientes consideraciones a la hora de evaluar tu solución: +~~~ +Si no Entonces +encriptWord <- alert('Solo se aceptan letras. Intentalo nuevamente!') +Fin Si +Fin Para -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 +Retornar encriptWord + +Fin Función +~~~ + +~~~ +Hacer message <- prompt('Ingrese una palabra') +Si message === null +alert('Regresa pronto :) ') +Si no si message.length === 0 Entonces +alert('Tu mensaje esta vacio intentalo nuevamente') +Si no menuOpc = '1.-Cifrar\n' + '2.-Decifrar' Entonces +opc <- prompt(menuOpc, 'Elige una opción:') +Si opc === '1' Entonces +Llamar Función cipher +Si no si opc === '2' Entonces +Llamar Función decipher +Si no Entonces +alert('Intentalo nuevamente') + +Fin Si +Repetir Mientras (!message) +Fin +~~~ +_________________________________________________ +#### Diagrama de Flujo: + +![recursos](https://github.com/NishiAicchi/WonderTeam-CifradoCesar/blob/master/assets/docs/recursos.jpg) diff --git a/assets/docs/recursos.jpg b/assets/docs/recursos.jpg new file mode 100644 index 0000000..6bfff14 Binary files /dev/null and b/assets/docs/recursos.jpg differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..91e9581 --- /dev/null +++ b/index.html @@ -0,0 +1,11 @@ + + + + + Cifrado Cesar + + + + + + diff --git a/js/app.js b/js/app.js new file mode 100644 index 0000000..87eafeb --- /dev/null +++ b/js/app.js @@ -0,0 +1,65 @@ +// FUNCIÓN DE CIFRADO +function cipher(message) { + var newString = message.toUpperCase();// A + var newPositionEncript; + var positionAlphabetAscii; + var encripWord = ''; + for (var j = 0; j < newString.length; j++) { + if (newString[j].charCodeAt() >= 65 && newString[j].charCodeAt() <= 90) { + positionAlphabetAscii = newString[j].charCodeAt(); // 65 + // Posición de la letra en ASCII + newPositionEncript = ((positionAlphabetAscii - 65) + 33) % 26 + 65; // 72 + // Con fórmula para encontrar la nueva posición encriptada + encripWord = encripWord + String.fromCharCode(newPositionEncript); // H + // variable que concatena la nueva encriptación + } else { + encripWord = alert('Solo se aceptan letras. Inténtalo nuevamente!'); + break; + } + } + return encripWord; +} +// FUNCIÓN DE DESCIFRADO +function decipher(message) { + var newString = message.toUpperCase(); // H + var newPositionNoEncript; + var positionAlphabetAscii; + var noEncripWord = ''; + + for (var j = 0; j < newString.length; j++) { + if (newString[j].charCodeAt() >= 65 && newString[j].charCodeAt() <= 90) { + positionAlphabetAscii = newString[j].charCodeAt(); // 72 + // Posición de la letra en ASCII + newPositionNoEncript = ((positionAlphabetAscii - 33 + 65) % 26) + 65; // 65 + // Con fórmula para encontrar la nueva posición no encriptada + noEncripWord += String.fromCharCode(newPositionNoEncript);// A + // variable que concatena la nueva encriptación + } else { + noEncripWord = alert('Solo se aceptan letras.Inténtalo nuevamente!'); + break; + } + } + return noEncripWord; +} +do { + var message = ''; + var message = prompt('Ingresa una palabra:'); + + if (message === null) { + alert('Regrese pronto :) '); + break; + } else if (message.length === 0) { + alert('Tu mensaje está vacío, inténtalo nuevamente'); + } else { + var menuOpc = '1.- Cifrar\n ' + ' 2.- Descifrar'; + var opc = prompt(menuOpc, 'Elige una opción:'); + if (opc === '1') { + cipher(message); + } else if (opc === '2') { + decipher(message); + } else { + alert('Inténtalo nuevamente'); + message = ''; + } + } +} while (message.length === 0);