La hormiga de Langton es una máquina de Turing universal bidimensional de 4 estados. Fue inventado por Chris Langton en 1986. Es básicamente una hormiga, sentada en un enrejado cuadrado de celdas, que inicialmente son blancas. La hormiga se mueve en el plano y cambia el color de las celdas creando patrones en él. Pero el movimiento de la hormiga no es aleatorio; sigue el siguiente conjunto de reglas:
- Si la hormiga está en un cuadrado negro, gira 90 grados a la derecha y avanza una unidad.
- Si la hormiga está en un cuadrado blanco, gira 90 grados a la izquierda y avanza una unidad.
- Cuando la hormiga sale de un cuadrado, invierte el color.
Cuando la hormiga comienza, crea un patrón en blanco y negro mientras se mueve. Inicialmente, los cambios no son distintivos, pero a medida que los iteramos una y otra vez, surge un hermoso patrón. Pero si aumentamos aún más el número de iteraciones (digamos ~ 10000), la hormiga comienza a repetir su camino con un cambio gradual, en lugar de crear nuevos patrones. Así, obtenemos un patrón tipo autopista que es infinito. La hormiga sigue moviéndose por esa carretera y da el siguiente patrón.
Consulte la explicación visual de la hormiga de Langton desde aquí . Ayuda a visualizar cómo funciona exactamente la hormiga.
El código de Python-3 para Langton’s Ant se proporciona a continuación:
# importing turtle module import turtle def langton(): # Initializing the Window window = turtle.Screen() window.bgcolor('white') window.screensize(1000,1000) # Contains the coordinate and colour maps = {} # Initializing the Ant ant = turtle.Turtle() # shape of the ant ant.shape('square') # size of the ant ant.shapesize(0.5) # speed of the ant ant.speed(10000) # gives the coordinate of the ant pos = coordinate(ant) while True: # distance the ant will move step = 10 if pos not in maps or maps[pos] == "white": #inverts the colour ant.fillcolor("black") #stamps a copy of the ant on the canvas ant.stamp() invert(maps, ant, "black") ant.right(90) #moves the ant forward ant.forward(step) pos = coordinate(ant) elif maps[pos] == "black": ant.fillcolor("white") invert(maps, ant, "white") ant.stamp() ant.left(90) ant.forward(step) pos = coordinate(ant) def invert(graph, ant, color): graph[coordinate(ant)] = color def coordinate(ant): return (round(ant.xcor()), round(ant.ycor())) langton()
Salida:
aquí, las celdas blancas se indican con ‘ ‘ (espacio) y las celdas negras se indican con ‘•’ (punto).
Publicación traducida automáticamente
Artículo escrito por Pulkit_Singh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA