|
| 1 | +# Reto 3: Cifrado espía |
| 2 | + |
| 3 | +## Problema |
| 4 | + |
| 5 | +Un grupo de espías ha descubierto que su sistema de cifrado de mensajes está comprometido. |
| 6 | + |
| 7 | +Han encontrado algunas contraseñas que no cumplen con laPolítica de Seguridad de Cifrado que tenían establecida cuando fueron creadas. |
| 8 | + |
| 9 | +Para solucionar el problema, han creado una lista (tu entrada al desafío) de contraseñas (según la base de datos corrupta) y la política de seguridad cuando esa clave fue establecida. |
| 10 | + |
| 11 | +**Ejemplo de la lista:** |
| 12 | + |
| 13 | +- 2-4 f: fgff |
| 14 | +- 4-6 z: zzzsg |
| 15 | +- 1-6 h: hhhhhh |
| 16 | + |
| 17 | +Cada línea indica, separado por :, la política de la clave y la clave misma. |
| 18 | + |
| 19 | +La política de la clave especifica el número mínimo y máximo de veces que un carácter dado debe aparecer para que la clave sea válida. Por ejemplo, 2-4 f significa que la clave debe contener f al menos 2 veces y como máximo 4 veces. |
| 20 | + |
| 21 | +Sabiendo esto, en el ejemplo anterior, hay 2 claves válidas: |
| 22 | + |
| 23 | +La segunda clave, zzzsg, no lo es; contiene 3 veces la letra z, pero necesita al menos 4. Las primeras y terceras claves son válidas: contienen la cantidad adecuada de f y h, respectivamente, según sus políticas. |
| 24 | + |
| 25 | +**Tu desafío:** |
| 26 | + |
| 27 | +Determina cuántas claves de cifrado son válidas según sus políticas. |
| 28 | + |
| 29 | +**Cómo resolverlo** |
| 30 | + |
| 31 | +1. Analiza la lista de políticas y claves de cifrado que encontrarás en este archivo: https://codember.dev/data/encryption_policies.txt |
| 32 | + |
| 33 | +2. Crea un programa que devuelva la clave inválida número 42 (de todas las claves inválidas, la 42ª en orden de aparición). Por ejemplo: |
| 34 | +**submit bqamidgewtbuz** |
| 35 | + |
| 36 | +## Mi Solución |
| 37 | + |
| 38 | +```js |
| 39 | +const validatePasswords = (passwords) => { |
| 40 | + const validPasswords = []; |
| 41 | + const invalidPasswords = []; |
| 42 | + |
| 43 | + passwords.forEach((password) => { |
| 44 | + const [policy, str] = password.split(':'); |
| 45 | + const [range, letter] = policy.split(' '); |
| 46 | + const [min, max] = range.split('-'); |
| 47 | + const regex = new RegExp(letter, 'g'); |
| 48 | + const matches = str.match(regex); |
| 49 | + const count = matches ? matches.length : 0; |
| 50 | + |
| 51 | + if (count >= min && count <= max) { |
| 52 | + validPasswords.push(str.trim()); |
| 53 | + } else { |
| 54 | + invalidPasswords.push(str.trim()); |
| 55 | + } |
| 56 | + }); |
| 57 | + return { validPasswords, invalidPasswords }; |
| 58 | +}; |
| 59 | +``` |
| 60 | + |
0 commit comments