usrbinenv python3 turtleexamplesuite xtxlindenmayerindian py each morning women in tamil nadu in southern india place designs using rice flour and known as kolam on the thresholds of their homes these can be described by lindenmayer systems which can easily be implemented with turtle graphics and python two examples are shown here 1 the snake kolam 2 anklets of krishna taken from marcia ascher mathematics elsewhere an exploration of ideas across cultures mini lindenmayer tool example 1 snake kolam example 2 anklets of krishna usr bin env python3 turtle example suite xtx_lindenmayer_indian py each morning women in tamil nadu in southern india place designs using rice flour and known as kolam on the thresholds of their homes these can be described by lindenmayer systems which can easily be implemented with turtle graphics and python two examples are shown here 1 the snake kolam 2 anklets of krishna taken from marcia ascher mathematics elsewhere an exploration of ideas across cultures mini lindenmayer tool example 1 snake kolam example 2 anklets of krishna
from turtle import *

def replace( seq, replacementRules, n ):
    for i in range(n):
        newseq = ""
        for element in seq:
            newseq = newseq + replacementRules.get(element,element)
        seq = newseq
    return seq

def draw( commands, rules ):
    for b in commands:
        try:
            rules[b]()
        except TypeError:
            try:
                draw(rules[b], rules)
            except:
                pass


def main():
    
    
    


    def r():
        right(45)

    def l():
        left(45)

    def f():
        forward(7.5)

    snake_rules = {"-":r, "+":l, "f":f, "b":"f+f+f--f--f+f+f"}
    snake_replacementRules = {"b": "b+f+b--f--b+f+b"}
    snake_start = "b--f--b--f"

    drawing = replace(snake_start, snake_replacementRules, 3)

    reset()
    speed(3)
    tracer(1,0)
    ht()
    up()
    backward(195)
    down()
    draw(drawing, snake_rules)

    from time import sleep
    sleep(3)

    
    
    

    def A():
        color("red")
        circle(10,90)

    def B():
        from math import sqrt
        color("black")
        l = 5/sqrt(2)
        forward(l)
        circle(l, 270)
        forward(l)

    def F():
        color("green")
        forward(10)

    krishna_rules = {"a":A, "b":B, "f":F}
    krishna_replacementRules = {"a" : "afbfa", "b" : "afbfbfbfa" }
    krishna_start = "fbfbfbfb"

    reset()
    speed(0)
    tracer(3,0)
    ht()
    left(45)
    drawing = replace(krishna_start, krishna_replacementRules, 3)
    draw(drawing, krishna_rules)
    tracer(1)
    return "Done!"

if __name__=='__main__':
    msg = main()
    print(msg)
    mainloop()