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()
输出 :
这里,白色单元格用“ ”(空格)表示,黑色单元格用“•”(点)表示。