-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
44 lines (29 loc) · 974 Bytes
/
Copy pathmain.py
File metadata and controls
44 lines (29 loc) · 974 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import numpy as np
from dfa import Node, generate_prefix_tree, render_dfa
from dfa_generation import generate_dfa
def main():
"""
Example usages of the code.
:return:
"""
nodes: list[Node] = generate_dfa(4, ())
root: Node = nodes[0]
assert root.id == 0
words = set()
while len(words) < 15:
words.add(generate_random_word())
words_in_language: set[str] = set()
words_not_in_language: set[str] = set()
for word in words:
if root.accepts(word):
words_in_language.add(word)
else:
words_not_in_language.add(word)
prefix_tree: Node = generate_prefix_tree(words_in_language, words_not_in_language)
render_dfa(prefix_tree)
def generate_random_word(length=5, alphabet=None) -> str:
if alphabet is None:
alphabet = ['a', 'b']
return ''.join(np.array(alphabet)[np.random.randint(0, len(alphabet), size=length)])
if __name__ == '__main__':
main()