Python | Hormiga de Langton

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *