Gramática lineal derecha - ∞ puntos
S->ε
S->1A
S->0S
S->9I
S->3C
S->5E
S->4D
S->2B
S->7G
S->6F
S->8H
F->3K
K->0F
A->2L
K->1G
A->5B
A->0J
B->7A
J->5A
G->6K
G->8S
H->9K
F->5S
K->2H
I->6E
I->5D
J->4S
D->8I
B->6S
K->9B
F->6A
G->9A
K->6L
K->4J
C->1E
L->8K
E->5C
B->4K
C->0D
J->2K
D->2C
A->9F
J->7C
C->6J
C->8L
E->0K
L->0C
B->9C
E->2S
L->6I
I->0L
J->0I
B->2I
I->3B
H->1C
I->7F
C->4H
F->1I
G->4I
I->0G
C->3G
F->8C
D->0A
E->3A
I->9H
A->7D
C->2F
H->7I
A->8E
F->9D
E->8F
A->6C
D->6G
G->0E
D->5F
E->9G
H->2D
D->7H
H->3E
I->2A
K->3I
C->9S
C->7K
E->4B
D->1B
L->1D
J->9E
I->1S
E->1L
J->8D
D->9J
L->2E
J->3L
B->5L
B->8B
L->7J
L->9L
G->1F
A->4A
K->5K
B->3J
H->6H
E->7E
J->1J
D->4E
G->2G
J->6B
D->3D
E->6D
H->4F
I->4C
C->5I
F->0H
H->5G
K->7S
G->3H
L->5H
H->8J
A->3S
H->0B
B->1H
G->7L
K->8A
F->2J
F->7B
L->4G
F->4L
A->1K
B->0G
G->5J
L->3F
Luego, dependiendo de cómo elija 'ejecutarlo', generará 'sí' o 'no'.
No es una entrada seria, solo un poco de diversión;)
EDITAR:
Tal vez debería explicar un poco.
Una gramática es un conjunto de reglas (producciones) que definen un lenguaje . Un lenguaje puede considerarse como todas las cadenas posibles formadas por un alfabeto, que se ajustan a las reglas de su gramática.
Aquí el alfabeto es el conjunto de todos los dígitos decimales. Las reglas de la gramática son que todas las cadenas deben formar enteros decimales que sean divisibles por 13.
Podemos usar la gramática anterior para probar si una cadena pertenece a nuestro idioma.
Las reglas de la gramática contienen símbolos terminales (que son elementos en el lenguaje), así como símbolos no terminales que se reemplazan recursivamente.
Es más fácil explicar lo que está sucediendo con un ejemplo:
Digamos, por ejemplo, que la cadena que estamos probando es 71955.
Siempre hay un símbolo de inicio (que no es terminal), en el caso de la gramática anterior es 'S'. En este punto no hemos leído ningún carácter de nuestra cadena:
current pattern symbol read
S ε
Ahora, leemos el primer símbolo en nuestra cadena que es '7', luego buscamos una regla en la gramática que tenga cualquiera de los no terminales en nuestro patrón actual en el lado izquierdo del '->' y que tiene nuestro símbolo en el lado derecho de '->'. Afortunadamente, hay uno (S-> 7G), por lo que reemplazamos los símbolos no terminales en nuestro patrón actual con el lado derecho de la nueva regla:
current pattern symbol read
7G 7
Ahora tenemos la 'G' no terminal en nuestro patrón, y el siguiente símbolo a leer es '1', así que buscamos una regla en nuestra gramática que comience con 'G-> 1 ". Encontramos que hay una (G-> 1F), por lo que reemplazamos el no terminal con el RHS de nuestra nueva regla:
current pattern symbol read
71F 1
Sigue repitiendo este proceso:
Siguiente regla: F-> 9D
current pattern symbol read
719D 9
Siguiente regla: D-> 5F
current pattern symbol read
7195F 5
Siguiente regla: F-> 5S
current pattern symbol read
71955S 5
En este punto no tenemos más símbolos en nuestra cadena, pero tenemos otro símbolo no terminal allí. Vemos de la primera regla en la gramática que podemos reemplazar 'S' con la cadena vacía (ε): S-> ε
Hacerlo nos da el patrón actual: 71955ε, que es el equivalente a 71955.
Hemos leído todos los símbolos en nuestra cadena, y el patrón no contiene símbolos no terminales. Lo que significa que la cadena pertenece al idioma y, por lo tanto, 71955 es de hecho divisible por 13.
Es decir, el objetivo es tener patrón = cadena. Si le quedan símbolos no terminales, después de leer todos los símbolos en su cadena, la cadena no pertenece al idioma. Del mismo modo, si todavía tiene más símbolos en su cadena para leer, pero no hay reglas en la gramática que le permitan avanzar, entonces la cadena no pertenece al idioma.