Skip to content
This repository was archived by the owner on Jan 8, 2020. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.eslintrc
58 changes: 1 addition & 57 deletions README.md
Original file line number Diff line number Diff line change
@@ -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
12 changes: 12 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Cipher Caesar</title>
</head>
<body>
<script type="text/javascript" src="js/app.js">
<h1>Cifrado Cesar</h1>
</script>
</body>
</html>
57 changes: 57 additions & 0 deletions js/app.js
Original file line number Diff line number Diff line change
@@ -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('</br>' + 'El texto cifrado es ' + cipher(input));
} else if (op === 2) {
document.write('</br>' + '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));