《图灵完备 Turing Complete》游戏攻略保姆级详解。
第二章:算术运算和存储器
前言
我们进入了第二章:算术运算和存储器。在第二章中,我们将会有两条支路,我们要研究算术运算和存储器,最后会制作出逻辑引擎、“小盒子”、计数器等。
二进制速算
在开始之前,我们先复习一下学过的逻辑门:
汉语
|
英语
|
性质
|
与门
|
AND
|
全绿就绿
|
或门
|
OR
|
有绿就绿
|
非门
|
NOT
|
就是叛逆
|
或非门
|
NOR
|
全红就绿
|
与非门
|
NAND
|
全绿就红
|
同或门
|
XNOR
|
不同就红
|
异或门
|
XOR
|
不同就绿
|
关卡解析
这一关和其他关卡不太一样,它更像是一个小游戏。你需要在玩这个小游戏的过程中,理解二进制的几个特点。这个小游戏并不难,你可以先自己玩,再听我来解析。具体玩法就是用下面的数字拼出来他给的数字。
这关貌似有个BUG,它说必须通关3级,实际上必须把5级都玩完。
二进制
我们生活中有很多种进制,例如最常用的十进制,表达色彩用的十六进制,表达时间用的六十进制,计算机底层使用的二进制等等。我们先来说说进制是什么。
从十进制说起,顾名思义就是逢10进1,例如:0-1-2-3-4-5-6-7-8-9,这时候就不能继续数了,要进1位,即:10-11-12-13-... 。我们可以看出,在十进制中,其实是没有“十”这个数字的,所谓的“10”,其实只是进了一位,是由“1”和“0”拼起来的。
我们再看看十六进制,十六进制在数到9之后是可以不进位继续数的,例如:0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F,数到F就不能继续数了,需要进行进位,即:A1-A2-A3-A4-...,接下来一直数到FF,就需要再进位一次,变成:AA1-AA2-... 。
也就是说,是几进制,这个数字就不存在,数到这个数字的前一位就不能数了。如果要继续往下数,就得进位。
现在我们再来看二进制,2-1=1,也就是说,二进制在数到1的时候就不能往下数了,必须要进位。所以,它是这样数数的:0-1-10-11-100-101-110-111-1000-... 。二进制就是即逢2进1,2不存在,是由“1”和“0”拼起来的。请确保你理解了二进制是什么。
位权
说了这么多,这个关卡到底需要我们明白什么?我们还需要引入新的概念——位权。
位权=基数位数-1
其中,几进制基数就是几。在二进制中,可以这样书写:
位权=2位数-1
假设我们现在有一个8位的二进制数10101010,那么根据公式计算,可得它每一位的位权分别是:128、64、32、16、8、4、2、1。你有没有发现,这和本关下方的按钮是一样的?
现在,我来举几个例子,你对照上图,就能发现其中的奥妙:
-
二进制100转化为十进制是多少?是4
-
二进制10000转化为十进制是多少?是16
-
二进制10100转化为十进制是多少?是4+16=20
还不懂?我再举几个:
-
二进制10转化为十进制是多少?是2
-
二进制111000转化为十进制是多少?是32+16+8=56
-
二进制10010101转化为十进制是多少?是128+16+4+1=149
-
二进制11111111转化为十进制是多少?是128+64+32+16+8+4+2+1=255
明白了吗?这对进制转换有很大的帮助。现在你可以尝试以这种思路,再次游玩本关卡。
成对的麻烦
关卡解析
我们输入已经拓展到了4个。现在来观察真值表,找到规律。
规律就是:“当有≥2个绿,输出绿”这关的解决方法也比较简单。首先把四个输入端两两接入与门检测,根据我们小学就学过的排列组合,4个输入端的排列方式有:
-
(1,2), (1,3), (1,4),
-
(2,3), (2,4),
-
(3,4)
共6种组合方式,因此我们需要用到6个与门:
将它门按照我们策划过的排列组合进行连接:
然后将这些结果使用或门连接,我们可以使用2个三路或门+1个或门:
本关最终答案
这样就完成了,但是不知道有没有更好的方法。
奇数个信号
关卡解析
本关要求我们使用3个元件,实现“输入绿为奇数个,就输出绿”。
首先我们要先看到问题的本质,假设我们现在只有两个输入端口,那么我们如果想判断是否是奇数个为绿,其实我们判断的就是这两个输入是不是一个绿一个红。那么什么逻辑门是能解决这个问题的呢?是异或门。
这种情况下,“判断输入是否不同”==“判断绿色是不是奇数个”。当我们的输入数拓展到4个,其实问题也是如此。我们只需要先判断两个,然后判断后两个,再把这两个判断结果放在一起判断即可。
本关最终答案
循环依赖
循环依赖
循环依赖是指一个或多个对象之间存在直接或间接的依赖关系,这种依赖关系构成一个环形调用,有下面 3 种方式。
图片来源于 https://www.elecfans.com/d/1891334.html
在本游戏中,至少目前,循环依赖是被禁止的。在某些电路中,循环依赖是被允许的。目前你不需要知道哪些电路是被允许的。
关卡解析
我们构建一个受自身影响的电路即可。也就是说,一个元件的输出连接到自身的输入上,例如:
本关最终答案
其实此结构也可以满足测试2的要求:
信号计数
关卡解析
如果你还没有学习二进制相关知识,可以在目录里查找学习。
本关较为复杂,用到了很多之前的知识,我们需要一点点思考,解决问题。
请务必先理解本关的目标:
我们的输出端一共有3个引脚,分别是1、2、4。这3个引脚是怎么运作的呢?是这样的:
-
第一个被点亮了结果就+1
-
第二个被点亮了结果就+2
-
第三个被点亮了结果就+4
也就是说:
-
输入端亮了1个→让输出端的第一个亮
-
输入端亮了2个→让输出端的第二个亮
-
输入端亮了4个→让输出端的第三个亮
也许你会问:“那如果亮了三个,该怎么办?”,其实这就是我们这关需要解决的最大问题。我们不妨先把前三种情况做出来,先忘掉亮了三个这种情况。
先解决第一个:如何判断输入端是否有1个绿?因为输入端有几个绿只有四种情况,即1个、2个、3个、4个。而且“3个”这种情况先被我们刨除在外了,就只剩下1个、2个、4个这三种情况。在剩下的三种情况中,显然只有“1个”是奇数,而“2个”和“4个”都是偶数,所以“1个”是最好确定的。
还记得我们之前有一关叫什么名字吗?“奇数个信号”,我们是学习过如何判断奇数个信号的:
-
这种情况下,“判断输入是否不同”==“判断绿色是不是奇数个”
我们可以直接沿用“奇数个信号”的电路:
观察真值表,我们可以发现,所有预期输出1的地方,全都正确了。
现在我们来考虑:如何判断输入端是否有2个绿?我们好好回忆一下,其实我们做过类似的电路。记不记得我们做过一个电路:“如果≥2个绿,则输出绿”?没错,是在“成对的麻烦”那关。现在我们只要把电路改成:“如果≥2个绿,且不是4个绿,则输出到第2个端口”即可。
现在我们来回忆一下:如果想判断是不是有两个是绿,只需要成对进行与门判断,然后再用或门连接即可。我们将这个电路做出来:
然后,我们将刚才做的两个电路,结合一下。注意,该插在哪个孔的还要插在哪个孔。
运行后发现,我们不仅解决了2的问题,还解决了我们刨除掉的3的问题,这是为什么?很简单,因为1+2=3,这用到了我们之前的进制转换原理。我们做好了1的电路,2的电路,当这两个电路叠加在一起,自然就是3的电路。
现在,我们只差4的电路,我们只要检测四个输入端口是否全是绿色即可,这很简单。先两两判断,然后再总的判断:
接下来,我们将3个电路合在一起。注意,该插在哪个孔的还要插在哪个孔。
运行后发现,还是不能准确的判断4的结果,显示为6。分析,错误源于“当同时出现4个绿色时,必然同时出现2个绿色”,因此,4+2=6。我们需要想办法做到“当同时出现4个绿色时,使2的电路失效”。我们只需要在2路和3路上加一个异或门,也就是“在2路和3路中,只有1个输出绿色时,才能在2路输出绿色”,可以理解为“只有在3路关闭时,2路才能启用”。这就是本关的完整电路:
本关最终答案
题外话
给大家看看我在没有好好分析的情况下硬造的版本,奇迹的是它能够满足要求!这里奉劝大家,在拓展思维发散创意的同时,也要先理解题目的含义,搞清楚需要运用到哪些知识点。
《图灵完备 Turing Complete》游戏攻略保姆级详解
你可以通过《图灵完备》这款游戏,学习处理器架构,搭建自己的伟大作品。游戏闯关模式的最终目标是搭建一台可以运行的计算机。我将会开始更新这款游戏的攻略,详细解析每一关的通关思路,并且讲解背后的原理。
以下三章为《图灵完备 Turing Complete》游戏手把手教程(教程原创为知乎:淘气喵w,特此说明)
第一章:基础逻辑电路
第二章:算术运算和存储器
第三章:处理器架构