#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
Tracer d'un L-système.

fichier : L_system.py
auteur : Bob sur une idée d'Arnaud Bodin
"""

# Import ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
import turtle

# Définition de fonction ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def trace_lsysteme(mot, lng=1, angle=90, echelle=1):
    mvts = "ABgd"
    
    for lettre in mot:
        if lettre in mvts:
            match lettre:
                case "A" | "B": turtle.forward(lng*echelle)
                case "g": turtle.left(angle)
                case "d": turtle.right(angle)
                

def iterer_lsysteme(depart, regle, k):
    mot = ""
    for i in range(k):
        for lettre in depart:
            if lettre in regle:
                mot += regle[lettre]
            else:
                mot += lettre
            depart = mot
    return mot


# Programme principal ==========================================================
turtle.pensize(2)
turtle.speed("fastest")
# turtle.penup()
# turtle.setposition(-400, 0)
# turtle.pendown()

depart_Koch = "AggAggA"
regle_Koch = {"A": "AdAggAdA"}
# depart_Koch = "AdAdAdA"
# regle_Koch = {"A": "AdAgAgAAdAdAgA"}
# depart_Koch = "A"
# regle_Koch = {"A": "AgAdAdAgA"}

nb = int(input("Nombre d'itérations (inférieur à 5) : "))
while nb >= 5:
    nb = int(input("Nombre d'itérations (inférieur à 5, SVP) : "))

iter = iterer_lsysteme(depart_Koch, regle_Koch, nb)
print(f"mot = {iter}")
trace_lsysteme(iter, echelle=3)

turtle.exitonclick()
