Skip to content

Commit

Permalink
Merge pull request #8 from marcode24/challenge-03
Browse files Browse the repository at this point in the history
✨ add challenge-03 solution
  • Loading branch information
marcode24 authored Nov 23, 2023
2 parents 511242a + 149a4c4 commit 5f5c903
Show file tree
Hide file tree
Showing 5 changed files with 603 additions and 1 deletion.
60 changes: 60 additions & 0 deletions 2023/03-cifrado-espia/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# Reto 3: Cifrado espía

## Problema

Un grupo de espías ha descubierto que su sistema de cifrado de mensajes está comprometido.

Han encontrado algunas contraseñas que no cumplen con laPolítica de Seguridad de Cifrado que tenían establecida cuando fueron creadas.

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.

**Ejemplo de la lista:**

- 2-4 f: fgff
- 4-6 z: zzzsg
- 1-6 h: hhhhhh

Cada línea indica, separado por :, la política de la clave y la clave misma.

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.

Sabiendo esto, en el ejemplo anterior, hay 2 claves válidas:

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.

**Tu desafío:**

Determina cuántas claves de cifrado son válidas según sus políticas.

**Cómo resolverlo**

1. Analiza la lista de políticas y claves de cifrado que encontrarás en este archivo: https://codember.dev/data/encryption_policies.txt

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:
**submit bqamidgewtbuz**

## Mi Solución

```js
const validatePasswords = (passwords) => {
const validPasswords = [];
const invalidPasswords = [];

passwords.forEach((password) => {
const [policy, str] = password.split(':');
const [range, letter] = policy.split(' ');
const [min, max] = range.split('-');
const regex = new RegExp(letter, 'g');
const matches = str.match(regex);
const count = matches ? matches.length : 0;

if (count >= min && count <= max) {
validPasswords.push(str.trim());
} else {
invalidPasswords.push(str.trim());
}
});
return { validPasswords, invalidPasswords };
};
```

Loading

0 comments on commit 5f5c903

Please sign in to comment.