Right Linear Grammar - ∞ punti
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
Quindi, a seconda di come si sceglie di "eseguirlo", verrà emesso "sì" o "no".
Non una voce seria, solo un po 'di divertimento;)
EDIT:
forse dovrei spiegare un po '.
Una grammatica è un insieme di regole (produzioni) che definiscono una lingua . Una lingua può essere pensata come tutte le possibili stringhe formate da un alfabeto, conformi alle regole della sua grammatica.
Qui l'alfabeto è l'insieme di tutte le cifre decimali. Le regole della grammatica prevedono che tutte le stringhe debbano formare numeri decimali divisibili per 13.
Possiamo usare la grammatica sopra per verificare se una stringa appartiene alla nostra lingua.
Le regole della grammatica contengono simboli terminali (che sono elementi nella lingua) e simboli non terminali che vengono sostituiti in modo ricorsivo.
È più facile spiegare cosa sta succedendo con un esempio:
Diciamo ad esempio che la stringa che stiamo testando è 71955.
C'è sempre un simbolo iniziale (che non è terminale), nel caso della grammatica sopra questa è 'S'. A questo punto non abbiamo letto alcun carattere della nostra stringa:
current pattern symbol read
S ε
Ora leggiamo il primo simbolo nella nostra stringa che è '7', quindi cerchiamo una regola nella grammatica che abbia uno dei non terminali nel nostro modello corrente nella parte sinistra del '->' e che ha il nostro simbolo nella parte destra di '->'. Fortunatamente ce n'è uno (S-> 7G), quindi sostituiamo i simboli non terminali nel nostro modello corrente con il lato destro della nuova regola:
current pattern symbol read
7G 7
Ora abbiamo la 'G' non terminale nel nostro modello e il prossimo simbolo da leggere è '1', quindi cerchiamo una regola nella nostra grammatica che inizi con 'G-> 1 ". Scopriamo che ce n'è uno (G-> 1F), quindi sostituiamo il non terminale con l'RHS della nostra nuova regola:
current pattern symbol read
71F 1
Continua a ripetere questo processo:
Regola successiva: F-> 9D
current pattern symbol read
719D 9
Regola successiva: D-> 5F
current pattern symbol read
7195F 5
Regola successiva: F-> 5S
current pattern symbol read
71955S 5
A questo punto non abbiamo più simboli nella nostra stringa, ma abbiamo un altro simbolo non terminale all'interno. Dalla prima regola della grammatica vediamo che possiamo sostituire 'S' con la stringa vuota (ε): S-> ε
In questo modo ci dà l'attuale scalpiccio: 71955ε che è l'equivalente di 71955.
Abbiamo letto tutti i simboli nella nostra stringa e il modello non contiene simboli non terminali. Ciò significa che la stringa appartiene alla lingua e quindi 71955 è in realtà divisibile per 13.
Cioè l'obiettivo è avere pattern = string. Se ti rimangono simboli non terminali, dopo aver letto tutti i simboli nella tua stringa, la stringa non appartiene alla lingua. Allo stesso modo, se hai ancora più simboli nella tua stringa da leggere, ma non ci sono regole nella grammatica che ti permettono di andare avanti, allora la stringa non appartiene alla lingua.