Un DFA (Deterministic Finite Automaton; Autómata Finito Determinista)
es una especie de máquina que sirve para decidir qué secuencias de
caracteres (palabras) de un cierto alfabeto son válidas o no. Por
ejemplo, esto es un DFA que sirve para reconocer ciertas palabras del
alfabeto {A, B, C}:
FALTA DIBUJO!!!
?‘Cómo hay que interpretar este diagrama?
Los círculos son los estados del autómata.
El es el estado inicial. Los estados con un círculo grueso (sólo uno, en el ejemplo) son los estados aceptadores.
Desde cada estado sale exactamente una flecha para cada letra del alfabeto.
El autómata cambia de estado siguiendo las flechas según indiquen las letras de la palabra, y empezando por el estado inicial.
Si después de procesar la palabra el autómata acaba en un estado
aceptador, responde Ok. Si acaba en un estado que no es
aceptador, responde No.
Por ejemplo: consideremos el autómata de la figura y la palabra
ABBBABBC. Este empieza en el estado 0. A continuación,
sigue la flecha de la A que sale del 0, y llega al estado
1. Luego sigue la de la B (desde el estado actual, el 1), y
llega al estado 2. Si seguimos, veremos que la secuencia total de
estados es
.
Como el estado 0 no es aceptador (no tiene un círculo grueso), el DFA
responde No. En cambio, si hubiéramos tenido la palabra
ABABBAC, la secuencia de estados hubiera sido
,
y hubiera respondido Ok.
Te pedimos que escribas un programa que simule la ejecución de un DFA para decidir si ciertas palabras dadas son o no son válidas.
Una entrada consiste en la descripción de un DFA, seguido de las
palabras que hay que validar. En una primera línea, se dan, separados
por espacios, el número
de estados del autómata (se numeran del
al
)
y el número
de letras mayúsculas consecutivas usadas del alfabeto (empezando siempre
por la A). A continuación,
líneas, cada una de las cuales contiene la información de un estado: un
carácter A o N para indicar si el estado es
aceptador o no, y
números de
a
para indicar los destinos de las
flechas que salen del estado al recibir las
letras A, B, C, …(mira el primer
ejemplo para ver cómo se representa el autómata de la figura).
A continuación, y después de una línea en blanco, se da el número
de palabras que hay que validar, y
líneas con las palabras, formadas únicamente por letras del alfabeto
elegido. Un guión (-) indica la palabra vacía (aquella
palabra que no tiene ninguna letra). Ninguna palabra tendrá más de
letras.
Escribe una línea para cada una de las
palabras del caso de prueba, con Ok si la palabra es
aceptada por el autómata, o No si no lo es.
Test-1:
Resolver entradas donde , , y ninguna palabra es vacía ni tiene más de caracteres.
Test-2:
Resolver entradas de todo tipo.