Día 9

Contraseñas gramaticales


¡Los malvados teleperos han inyectado un ransomware en los equipos de los CoreElfos, sin estos, no pueden saber si los niños se están portando bien ni predecir los regalos que quieren! Los teleperos demandan que se cancele la navidad, o borrarán todos los archivos, pero nuestro equipo de seguridad ha descubierto una lista de posibles contraseñas para desbloquear el virus.

Han descubierto que para que una contraseña sea válida, debe seguir una serie de reglas.
Estas reglas funcionan un poco como un “paso a paso” para construir una palabra. Empiezas por S, y cada regla te dice qué puedes poner después: a veces una letra, a veces otra regla. Al final, si solo quedan letras, la contraseña es válida.
S -> A B
A -> "a" C | "a"
B -> "b" D | "b"
C -> "c" E | "c"
D -> "d" F | "d"
E -> "e" | "e" "a"
F -> "f" | "f" "b"

El símbolo `|` significa “o”. Por ejemplo, la regla
A → "a" C | "a" 
quiere decir que A puede convertirse en “a” seguido de C, o simplemente en “a”.
Es como elegir un camino entre varias opciones

Ejemplo sencillo:
S → A B
A → “a”
B → “b”
⇒ esto produce la palabra ab, por lo que ab es válida.

Otro ejemplo (usando opciones más largas):
S → A B
A → “a” C
C → “c” E
E → “e”
B → “b”
⇒ esto produce aceb, y también es válida.

La idea siempre es la misma:
Empiezas desde S, vas siguiendo las reglas, eliges entre las opciones que aparecen con |, y si al final solo quedan letras, la contraseña es válida.

La respuesta es el número de contraseñas válidas posibles siguiendo estas reglas.
Inicia Sesión para responder
Volver a problemas