
d = {
"algea" : ("A", [("A","AB"),("B","A")]),
"plantA" : ("0",[("1","11"),("0","1[+0]-0")])
}


    #plant
    #~ var = ["1","0"]
    #~ const = ["[","]"]
    #~ axiom = "0"
    #~ rules = [("1","11"),("0","1[+0]-0")]            #added + - for coherence
    #0 mean draw line segment ending with leaf
    #1 mean draw line segment
    #push position turn 45 degree left
    #pop position turn 45 degree right

    #~ #Cantor dust
    #~ variables = ["A", "B"]
    #~ constants = None
    #~ axiom  = "A"
    #~ rules  = [("A",  "ABA"), ("B" , "BBB")]
    #B mean move forward
    #A mean draw forward

    #Koch curve
    #~ variables = "F"
    #~ constants = ["+","-"]
    #~ axiom  = "F"
    #~ rules  = [("F" ,"F+F-F-F+F")]
    #F means draw forward 
    #+ means turn left 90
    #- means turn right 90

    #Sierpinski triangle
    #~ variables = ["A", "B"]
    #~ constants = ["+", "-"]
    #~ axiom  = "A"
    #~ rules  = [("A" , "B-A-B"), ("B" , "A+B+A")]
    #angle  : 60
    #A and B both mean "draw forward", 
    #+ means "turn left by angle", and 
    #- means "turn right by angle"

    #dragon curve
    #~ variables = "X", "Y"
    #~ constants = "F", "+", "-"
    #~ axiom  = "FX"
    #~ rules  = [("X" , "X+YF"), ("Y" , "FX-Y")]
    #angle  : 90
    #F means "draw forward"
    #- means "turn left 90"
    #+ means "turn right 90". 

    #Fractal plant
    #~ variables = "X", "F"
    #~ constants = "+", "-"
    #~ axiom  = "X"
    #~ rules  = [("X" , "F-[[X]+X]+F[+FX]-X"), ("F" , "FF")]
    #angle  : 25
    #Here, F means "draw forward" 
    #- means "turn left 25" 
    #+ means "turn right 25"


def iterate(s,rule):
    n = ""
    for i in s:
        for r in rule:
            if i == r[0]:
                i = r[1]
                break
        n = n + i
    return n


if __name__ == "__main__":

    s = "0"
    print(s)
    for i in range(5):
        s = iterate(s, [("1","11"),("0","1[+0]-0")])
        print(s)
