在女朋友的赞助下,购入了没打折的《图灵完备》,记录一下游玩进度。
「信号计数」是个有点意思的关卡:
本关里你要实现的电路是一个二进制计数器,它的三个输出引脚分别对应 1、2、4 三个二进制数位。
你需要计算四路输入里有多少路处于 1,并将结果转换成二进制,发送到输出端的三个引脚上。
提示:此关卡的解法不很简洁,你需要用到比前几关里更多的元件。
尝试写了个表格,把问题拆分。
abcd | 421
-----+----
0000 | 000
0001 | 001
0010 | 001
0100 | 001
1000 | 001
0011 | 010
0101 | 010
1001 | 010
0110 | 010
1010 | 010
1100 | 010
0111 | 011
1011 | 011
1101 | 011
1110 | 011
1111 | 100
最高位 4 只有在四个输入都为 1 的情况下才为 1,所以只需要两层与门套在一起就好了。
最低位 1 会在存在输入中存在奇数个 1 的情况下为 1,两层异或门套在一起也能搞定。
中间位 2 会在输入中有 2 个或者 3 个 1 的情况下为 1,这个麻烦一些。虽然可以把每一种情况都列出来,不过画布看上去没有那么大的空间放置这么多门。
不过,注意到这些组合中,abcd 四个位置,除了 0011 和 1100 这两种输入之外,其它的组合,都满足这样一个条件:a 和 b 中至少有一个为 1,c 和 d 中至少有一个为 1。
于是,对 0011 和 1100 特别处理,然后对其他情况先用或门,再用与门。最后把三种情况并(或门)在一起,最后排除 1111 的情况,就可以了。
