forked from mohammed-nurulhoque/Shapes_Studio
-
Notifications
You must be signed in to change notification settings - Fork 0
/
L_sys.py
50 lines (37 loc) · 1.06 KB
/
L_sys.py
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
45
# This module is a class that represents an L-system string generator
class L_sys:
def __init__(self):
self.alphabet = set()
self.seed = ''
self.rules = {}
self.string = ''
def make_alphabet(self,S):
self.alphabet = set(c for c in S)
for c in S:
self.rules[c] = c
def make_seed(self,S):
for c in S:
if c not in self.alphabet:
return
self.seed = S
self.string = S
def make_rule(self,c, R):
for s in R:
if s not in self.alphabet:
return
self.rules[c] = R
def gen_next(self):
s = ''
for c in self.string:
s += self.rules[c]
self.string = s
return s
def __repr__(self):
return 'L-system string generator\n Current string: "%s"'%self.string
# factory method
def create_sys(alphabet, seed):
sys = L_sys()
sys.make_alphabet(alphabet)
if seed in sys.alphabet:
sys.make_seed(seed)
return sys