📜  Python | 兰顿的蚂蚁

📅  最后修改于: 2020-05-10 13:56:45             🧑  作者: Mango

兰顿的蚂蚁是一种四态二维通用图灵机。 它是由克里斯·兰顿(Chris Langton)于1986年发明的。它基本上是只蚂蚁,坐在一个正方形的格子细胞上,这些格子最初是白色的。 蚂蚁在平面上移动并改变细胞的颜色,从而在其上形成图案。 但是蚂蚁的运动不是随机的。 它遵循以下规则集:

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

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


下面给出了Langton’s Ant的Python-3代码:

# 导入乌龟模块
  import turtle
  def langton():
     # 初始化窗口
      window = turtle.Screen()
      window.bgcolor( 'white' )
      window.screensize( )
     # 包含坐标和颜色
      maps = {}
     # 初始化蚂蚁
      ant = turtle.Turtle()
     # 蚂蚁的形状
      ant.shape( 'square' )
     # 蚂蚁的大小
      ant.shapesize( 0.5 )
     # 蚂蚁的速度
      ant.speed( 10000 )
     # 给出蚂蚁的坐标
      pos = coordinate(ant)
      while True :
         # 蚂蚁会移动的距离
          step = 10
          if pos not maps or maps[pos] = = "white" :
             # 反转颜色
              ant.fillcolor( "black" )
             # 在画布上盖章
             ant.stamp()
              invert(maps, ant, "black" )
              ant.right( 90 )
             # 使蚂蚁前进
             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()

输出:

在此,白色单元格用”(空格)表示,黑色单元格用’•'(点)表示。