机关谜题里,每条规则可能只涉及两个开关,例如至少一个打开,或某个打开时另一个必须关闭。把规则写成逻辑表达式,可以系统地检查是否存在同时满足所有规则的设置。

本例采用的规则

本例六个布尔开关,一条子句由两个带正负号的条件作或连接,全部子句共同成立。文字A表示开关A打开,负号A表示关闭。每条或子句可转成两条蕴含边:第一个条件不成立时必须满足第二个,反向也一样。

独立输入与结果

开关A至F,负号表示该开关关闭;所有行必须同时成立。

B 或 A E 或 -A F 或 D -B 或 B B 或 -D C 或 D -C 或 D -E 或 -C -F 或 -B A 或 -F -A 或 B 互相可达的条件组: ['A'] ['-A'] ['B', 'D', '-F'] ['-B', '-D', 'F'] ['C'] ['-C'] ['E'] ['-E'] 满足设置总数4,前八组的打开开关如下: BD BCD BDE ABDE 出现正反互推的开关:[]

表中的编号仅用于区分当前案例里的对象,不能与数值大小或另一份记录中的身份混淆。先核对输入、单位和边界约定,再跟随过程检查输出。空列表、不存在和数值零各有不同含义,分数则保留精确形式便于复算。

检查与练习

若一个条件能沿蕴含链推出自己的否定,而否定又能推出原条件,就构成矛盾,这时没有完整设置。否则可寻找满足全部子句的设置。示例还枚举全部六十四种状态计数,不能把找到一组答案误写成只有这一组。

用得到的完整设置逐条代回原规则,而不只检查中间蕴含图。遇到无解时,指出哪个开关的正反条件互相可达,比只给一个失败标志更容易理解。空解集表示规则冲突,不能通过默认把所有开关关掉来冒充答案。

结论适用范围

这只适用于每条规则至多两个条件的形式,不能把三个条件的或随意拆成两条而声称完全等价。图里的边代表逻辑要求,不是机关移动路线;边的方向也不能反过来理解。

这是一份可重复演算的游戏知识记录,结论只对写明的输入与规则成立。练习时可以先改变一个条件,再对照中间记录寻找变化从哪一步开始。若结果不同,应先确认操作顺序和边界定义,而不是只改最后一个数字;原始输入与完整过程应一起保留。