大忙人系列-程序猿在想什么 (一下) 禁止套娃

五. 红石电路
个人本来是不玩Minecraft的,哪怕很早就听说过可以在MC里面自己搭计算机。最后是无奈某校黑客大赛里面出过红石电路题目,虽然当时懒得做,后来还是好好把玩了一下红石电路。虽然比起生命游戏,构建逻辑门上及那单简单了许多,但是当时做一个七段数码管就已经开始头晕了。
整个电路的核心很简单,就是红石火把——当挂在充能的块上会处于熄灭状态,而普通情况则是充能、凉的状态。利用这一个特性很容易就能做出一个非门——一些红石线、一个普通的块,外加一个红石火把就行。也正是因为这个特性,用很少的地方和材料就能做出其他的逻辑门。
或非门的话,可以通过两个输入对块进行充能,只要有其一,那么块旁侧的红石火把就会处于熄灭状态,即或非逻辑。与非门的话,直接利用并联的特性把红石线连一起对块充能就可以了,怕影响输入端的话可以用每个输入对块充能,然后块上的红石火把串联,中间的串联线对所在块充能,然后再在块旁侧放一个红石火把连出去即可。不过这就不是与非门而是与门了。
除了红石火把外,红石块也很重要——因为可以和活塞一起用。把红石块连在活塞尾,中间加上中继器,就可以变成一个时序电路了。时序电路也是计算机相当重要的模块,不然稳态电路下状态永远无法改变。
从没有人知道做一个设备最少可以只用多少个晶体管或者元件。哪怕就做一个简单的异或门,使用P/N的MOS管用几个能做成?答案是7个,但是不论证明,尚且构建出来都要花很多精力。每个单一的组件,哪怕内存、逻辑计算单元,似乎都比较容易搭建出来,但是如何考虑拓扑结构、联结、构建出一整个可以用的系统是一个非常复杂的问题。用默认的方法搭显然花时间,所以很多问题才会选择去抽象出一个逻辑模型,然后层层往上封装,最终出来完整的系统。
六. 兰顿蚂蚁
在平面上的正方形格被填上黑色或白色。在其中一格正方形有一只“蚂蚁”。它的头部朝向上下左右其中一方。若蚂蚁在黑格,右转90度,将该格改为白格,向前移一步;若蚂蚁在白格,左转90度,将该格改为黑格,向前移一步。
——这个系统被证明是图灵完备的。
从空白的白棋盘出发,蚂蚁最终会走出一条“高速公路”一样的路径。
比起生命游戏,兰顿蚂蚁似乎更简单,但是似乎也十分复杂。网上的资料十分的少,个人也实在懒得去翻论文。本来不想写这一项,但是最后因为下一个游戏而不得不在这里提一句。
七. BABA IS YOU
这又是一个十分和自己过不去的游戏。这个游戏里面你要操作BABA,一个可爱的小白...狗?——不不不,有的时候你连BABA都操作不了。在运气比较好的时候你可以操作KEKE或者ME,又或者机器人、手、心?运气不好的时候你可能开局就没东西可操控了。
这个游戏本质就是不停地改规则,然后最终用带YOU属性的物件触碰带WIN属性的物件就行。每一关大多数情况只有一种解法,所以总体并不是很难。然后是有不少的META,当然只有玩过游戏的人才知道。
不过这和套娃又有什么关系呢?
实际上,BABA IS YOU可以比较简单的实现生命游戏。不过最开始听说这玩意儿图灵完全,我第一反应是构造兰顿蚂蚁就是。
1. 蚂蚁的行为
蚂蚁当然就是游戏的主角——BABA啦。
黑色是GRASS,白色是ICE。
ICE ON BABA IS GRASS
GRASS ON BABA IS ICE
GHOST IS MOVE
BABA IS GHOST
GHOST IS BABA
2. 状态机
兰顿蚂蚁需要转向,而BABA游戏内并没有转向的属性,那就多写几个属性呗。
BABA ON GRASS FACING UP IS RIGHT
BABA ON GRASS FACING RIGHT IS DOWN
......
BABA ON ICE FACING UP IS LEFT
BABA ON ICE FACING LEFT IS DOWN
......
这样就不愁转向问题了。
3. 为啥要多转一步BABA IS GHOST;GHOST IS BABA?
因为要先转弯再走啊!