def analizar_secuencia(instrucciones, codificaciones): """ Recibe un string con instrucciones y un diccionario que contiene la codificación para algunas instrucciones variables. Devuelve un set de trazos correspondientes al análisis del string, la distancia máxima y la distancia mínima con la que ha de crearse el svg. """ coordenada_min = Vector() coordenada_max = Vector() pila_de_tortugas = Pila() pila_de_tortugas.apilar(Tortuga()) tortuga_tope = pila_de_tortugas.ver_tope() profundidad = len(pila_de_tortugas) trazos = set() for c in instrucciones: if c == "[": nueva_tortuga = tortuga_tope.clonar() pila_de_tortugas.apilar(nueva_tortuga) tortuga_tope = pila_de_tortugas.ver_tope() profundidad = len(pila_de_tortugas) elif c == "]": pila_de_tortugas.desapilar() tortuga_tope = pila_de_tortugas.ver_tope() profundidad = len(pila_de_tortugas) elif c == "F": ultima_posicion = tortuga_tope.conseguir_posicion() tortuga_tope.avanzar(DISTANCIA_BASE * (FACTOR_EXPANSION**profundidad)) nueva_posicion = tortuga_tope.conseguir_posicion() coordenada_min = calcular_min(coordenada_min, nueva_posicion) coordenada_max = calcular_max(coordenada_max, nueva_posicion) nuevo_trazo = Trazo(ultima_posicion, nueva_posicion, tortuga_tope.conseguir_grosor(), tortuga_tope.conseguir_color()) trazos.add(nuevo_trazo) elif c == "f": tortuga_tope.levantar_pluma() tortuga_tope.avanzar(DISTANCIA_BASE * (FACTOR_EXPANSION**profundidad)) tortuga_tope.bajar_pluma() elif c in "+-|": tortuga_tope.girar(codificaciones[c]) elif c in COLORS: tortuga_tope.cambiar_color_pluma(COLORS[c]) elif c in "0123456789": print(c) tortuga_tope.cambiar_grosor_pluma(c) return trazos, coordenada_min + Vector(-50, -50), coordenada_max + Vector( 50, 50)