📜  Python|兰顿的蚂蚁

📅  最后修改于: 2022-05-13 01:54:58.899000             🧑  作者: Mango

Python|兰顿的蚂蚁

Langton's Ant是一个 4 态二维通用图灵机。它是 1986 年由 Chris Langton 发明的。它基本上是一只蚂蚁,坐在方形格子上,最初是白色的。蚂蚁在平面上移动并改变细胞的颜色,在其上形成图案。但是蚂蚁的运动不是随机的;它遵循以下规则:

  • 如果蚂蚁在黑色方块上,它会向右转 90 度并向前移动一个单位。
  • 如果蚂蚁在一个白色方块上,它会向左转 90 度并向前移动一个单位。
  • 当蚂蚁离开正方形时,它会反转颜色。

当蚂蚁开始时,它会在移动时创建一个黑白图案。最初,这些变化并不明显,但当我们一遍又一遍地迭代它时,就会出现一个漂亮的模式。但是,如果我们进一步增加迭代次数(比如 ~ 10000 次),蚂蚁就会开始逐渐转移重复其路径,而不是创建新模式。因此,我们获得了一个类似高速公路的无限模式。蚂蚁继续在那条高速公路上移动,并给出以下模式。

从这里参考 Langton's Ant 的视觉解释。它有助于可视化蚂蚁的工作原理。

Langton's Ant 的Python-3 代码如下:

# 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()

输出 :

这里,白色单元格用“ ”(空格)表示,黑色单元格用“•”(点)表示。