美文网首页
程序员侦探系列—刑侦推理题

程序员侦探系列—刑侦推理题

作者: PrivateEye_zzy | 来源:发表于2018-03-05 17:48 被阅读0次

    题目来自于2018年江苏省招聘刑侦警察的推理笔试题,题目如下

    刑侦推理题

    阅读题目后,显然这是10个前后逻辑严谨的推理题,基于程序员本能可以大致抽象出两点

    (1):题目中的选项答案,即是其自身的答案(如第一题,第二题等)

    (2):题目中的选项答案,指的是答案中对应题目的答案,即答案中的答案(如第三题,第四题得分)

    显然,这个题目可以单纯的靠着逻辑学和排除法,用笔和纸通过假设推导或者画图推理出来。但是作为程序员,显然应该通过编程的方法(趣味编程),来寻找那唯一的真相

    根据题目分析,我们可以轻松的抽象出其数学模型:无非是编写一个逻辑函数,这个函数接收一个随机的答案排列为输入,然后经过有限个逻辑约束来判断,中途只要违背一个条件约束,就返回False来重新接受新的随机答案排列,如果到最后都没有违背任意一个条件约束,就返回True,即证明输入的答案排列就是其真实的答案排列

    下面我们来构造逻辑函数judge(inputs),形参inputs代表输入随机答案排列,而函数里的有限个逻辑约束就是这10个题目要求,我们需要将这些题目翻译成逻辑代码

    在翻译之前,我们定义两个表达式来表达上面抽象出的两点

    select[answer]:指的是该题自身的答案

    inputs[select[answer]]:指的是答案中答案(题目)的答案,或者是第select[answer]个题目对应的答案

    对于第1题没什么可以翻译的,我们从第2题分析,第2题的要求是第5题的答案是什么,也就是说如果第2题的答案不是第5题的答案,则这组答案一定错误,则我们可以编写

    第二题翻译

    同理,分析第3题,要求选择的答案对应题目的答案,不在剩余答案所对应的题目的答案里

    第三题翻译

    分析第4题,要求选择的答案对应题目的答案应该一致

    第四题翻译

    分析第5题,要求选择的答案对应题目的答案应该等于第5题自身的答案

    第五题翻译

    分析第6题,要求选择的答案对应题目的答案应该等于第8题自身的答案

    第六题翻译

    分析第7题,要求其自身的答案等于所有题目里选项最少的答案

    第7题翻译

    分析第8题,要求选择的答案对应题目的答案,应该和第1题的答案不相邻

    第8题翻译

    分析第9题,要求"选择的答案对应题目的答案和第5题的答案是否相同"与"第1题和第6题的答案是否相同"互斥

    第9题翻译

    分析第10题,要求其自身的答案等于所有题目里答案出现次数最少的次数

    第10题翻译

    至此我们完成了对这10个逻辑约束的翻译,也完成了逻辑函数的编程,还有一点值得注意,题目答案的编码,我们利用了0123带代表ABCD,这样方便我们可以直接作为数组索引来寻址到任意一个题目的答案,也方便我们用加减法计算是否相邻

    最后,只要利用计算机算力的高性能,使用穷举法跑我们的逻辑函数,就可以在有限的时间内找到真正的答案(由于使用了穷举法,答案的输入是完全随机的,所以计算时间也是不一定的)

    消耗5秒找到真相 消耗1.6秒找到真相

    从结果上可以看到,计算机成功扮演了侦探角色,很快的找到了唯一的真相!

    也可以看出,程序员 > 侦探

    案例代码见:刑侦推理题

    相关文章

      网友评论

          本文标题:程序员侦探系列—刑侦推理题

          本文链接:https://www.haomeiwen.com/subject/jjdhfftx.html