来源《程序员的数学》
■ 三灯游戏
这回我们看看3个灯会是什么情况。
【三灯游戏的规则】
请在下述情况时按下按钮。
ⓐ 绿灯、黄灯、红灯都灭
ⓑ 黄灯灭,红灯亮
ⓒ 绿灯灭,黄灯亮
ⓓ 绿灯、黄灯、红灯都亮
现在灯泡有绿色、黄色、黄色3种。
因为有三个灯,我们就假设有以下命题
・ 命题A “绿灯亮”
・ 命题B “黄灯亮”
・ 命题C “红灯亮”
正常情况我们根据条件来写代码就行了
bool A = true, B = true, C = true;
if (!A && !B && !C || !B && C || !A && B || A && B && C)
{
print("按下按钮");
}
这样的话游戏逻辑就写好了,很简单但是很难看,现在用卡诺图简化逻辑
先画一个卡诺图
在逻辑成立的地方打上√
比如:第一个√(A为false并且B为false并且C为false)
明显游戏规则中是成立的,所以打上√
其它的同理,最后可以抽出来逻辑了。
明显可以看出,在A为false的情况下,是全部成立的,且C为ture的情况下也是全部成立的。
所以总结一下,这个游戏其实就跟A与C有关。一共只有三种情况就囊括了所有的可能
第一,A为false,最上边一排4格的情况为成立
第二,C为true,最下边一排中间两格的情况为成立
第三,以上都不成立,那就是最下边一排左右两格,为不成立。
这个游戏用这样的一个判断就能制定逻辑,简化后的代码。
if (!A || C)
{
print("按下按钮");
}
优雅简洁。
这些逻辑是可以用肉眼推测出来的,只是卡诺图更加明了且不容易出错,在遇到很长的逻辑判断时,可以优化一下。