【python】对于程序员来说,2018刑侦科推理试卷是问题么?
最近网上很火的2018刑侦科推理试卷,题目确实很考验人逻辑思维能力。
可是对于程序员来说,这根本不是问题。写个程序用穷举法计算一遍即可,太简单。
import itertools
class Solution(object):
answer = []
def check3(self):
if self.answer[3-1] == 'A':
return (self.answer[6-1] == self.answer[2-1] == self.answer[4-1]) and (self.answer[6-1]!= self.answer[3-1])
if self.answer[3-1] == 'B':
return (self.answer[3-1] == self.answer[2-1] == self.answer[4-1]) and (self.answer[3-1]!= self.answer[6-1])
if self.answer[3-1] == 'C':
return (self.answer[6-1] == self.answer[3-1] == self.answer[4-1]) and (self.answer[6-1]!= self.answer[2-1])
if self.answer[3-1] == 'D':
return (self.answer[6-1] == self.answer[2-1] == self.answer[3-1]) and (self.answer[6-1]!= self.answer[4-1])
def check4(self):
if self.answer[4-1] == 'A':
return (self.answer[1-1] == self.answer[5-1])
if self.answer[4-1] == 'B':
return (self.answer[2-1] == self.answer[7-1])
if self.answer[4-1] == 'C':
return (self.answer[1-1] == self.answer[9-1])
if self.answer[4-1] == 'D':
return (self.answer[6-1] == self.answer[10-1])
def check5(self):
if self.answer[5-1] == 'A':
return (self.answer[8-1] == self.answer[5-1])
if self.answer[5-1] == 'B':
return (self.answer[4-1] == self.answer[5-1])
if self.answer[5-1] == 'C':
return (self.answer[9-1] == self.answer[5-1])
if self.answer[5-1] == 'D':
return (self.answer[7-1] == self.answer[5-1])
def check6(self):
if self.answer[6-1] == 'A':
return (self.answer[2-1] == self.answer[4-1] == self.answer[8-1])
if self.answer[6-1] == 'B':
return (self.answer[1-1] == self.answer[6-1] == self.answer[8-1])
if self.answer[6-1] == 'C':
return (self.answer[3-1] == self.answer[10-1] == self.answer[8-1])
if self.answer[6-1] == 'D':
return (self.answer[5-1] == self.answer[9-1] == self.answer[8-1])
def check7(self):
aCount = self.answer.count('A')
bCount = self.answer.count('B')
cCount = self.answer.count('C')
dCount = self.answer.count('D')
if self.answer[7 - 1] == 'A':
return cCount < aCount and cCount < bCount and cCount < dCount
if self.answer[7 - 1] == 'B':
return bCount < aCount and bCount < cCount and bCount < dCount
if self.answer[7 - 1] == 'C':
return aCount < bCount and aCount < cCount and aCount < dCount
if self.answer[7 - 1] == 'D':
return dCount < aCount and dCount < bCount and dCount < cCount
def check8(self):
if self.answer[8-1] == 'A':
return abs(ord(self.answer[7-1]) - ord(self.answer[1-1])) > 1
if self.answer[8-1] == 'B':
return abs(ord(self.answer[5-1]) - ord(self.answer[1-1])) > 1
if self.answer[8-1] == 'C':
return abs(ord(self.answer[2-1]) - ord(self.answer[1-1])) > 1
if self.answer[8-1] == 'D':
return abs(ord(self.answer[10-1]) - ord(self.answer[1-1])) > 1
def check9(self):
con1 = (self.answer[1-1] == self.answer[6-1])
con2 = False
if self.answer[9 - 1] == 'A':
con2 = (self.answer[6-1] == self.answer[5-1])
if self.answer[9 - 1] == 'B':
con2 = (self.answer[10-1] == self.answer[5-1])
if self.answer[9 - 1] == 'C':
con2 = (self.answer[2-1] == self.answer[5-1])
if self.answer[9 - 1] == 'D':
con2 = (self.answer[9-1] == self.answer[5-1])
return con1 != con2
def check10(self):
aCount = self.answer.count('A')
bCount = self.answer.count('B')
cCount = self.answer.count('C')
dCount = self.answer.count('D')
maxV = aCount
minV = aCount
for i in [aCount,bCount,cCount,dCount]:
if maxV < i:
maxV = i
if minV > i:
minV = i
if self.answer[10 - 1] == 'A':
return (maxV - minV) == 3
if self.answer[10 - 1] == 'B':
return (maxV - minV) == 2
if self.answer[10 - 1] == 'C':
return (maxV - minV) == 4
if self.answer[10 - 1] == 'D':
return (maxV - minV) == 1
def check(self):
ret = True
ret = self.check3()
if ret == False:
return False
ret = self.check4()
if ret == False:
return False
ret = self.check5()
if ret == False:
return False
ret = self.check6()
if ret == False:
return False
ret = self.check7()
if ret == False:
return False
ret = self.check8()
if ret == False:
return False
ret = self.check9()
if ret == False:
return False
ret = self.check10()
if ret == False:
return False
return ret
def calc(self):
option = ['A','B','C','D']
for x in itertools.product(*[option] * 10):
self.answer = list(''.join(x))
if self.check() == True:
print self.answer s = Solution()
s.calc()
最终输出答案是: ['B', 'C', 'A', 'C', 'A', 'C', 'D', 'A', 'B', 'A']
【python】对于程序员来说,2018刑侦科推理试卷是问题么?的更多相关文章
- python的约束库constraint解决《2018刑侦科题目》
Github地址:https://github.com/ZJW9633/hello-word/blob/master/Xingzhenke 题目分析: 10道题互相关联,耦合性强,暴力求解需4^10种 ...
- 一:对程序员来说CPU是什么?
0.开篇 (1)程序是什么? 指示计算机每一步动作的一组指令 (2)程序是由什么组成的? 指令和数据 (3)什么是机器语言? ...
- Python/Java程序员面试必备常用问题解析与答案
转自AI算法联盟,理解python技术问题,以及一些常见的java面试中经常遇到的问题,这些面试问题分为四类: 是什么(what) 如何做(how) 说区别/谈优势(difference) 实践操作( ...
- 笨办法学python - 专业程序员的养成完整版PDF免费下载_百度云盘
笨办法学python - 专业程序员的养成完整版PDF免费下载_百度云盘 提取码:xaln 怎样阅读本书 由于本书结构独特,你必须在学习时遵守几条规则 录入所有代码,禁止复制粘贴 一字不差地录入代码 ...
- Python超级程序员使用的开发工具
我以个人的身份采访了几个顶尖的Python程序员,问了他们以下5个简单的问题: 当前你的主要开发任务是什么? 你在项目中使用的电脑是怎样的? 你使用什么IDE开发? 你将来的计划是什么? 有什么给Py ...
- 大一C语言学习笔记(3)---对于程序员来说,学历和能力,到底哪个重要?
在高考失利后,我合理地萎靡一段时间,振作起来之后选择了我憧憬了10年的计算机专业---软件工程.但由于分数受限,也是选择了二本普通院校黑科技(我当然爱她,我的母校),而因为学历上的自卑,让我有了想考研 ...
- (第一章)对程序员来说CPU是什么
这几天,看到一本书,<程序是怎么跑起来的>,觉得之前都没有完整的看完一本书,现在要从这本书开始,慢慢的培养自己写读书笔记的习惯,不能度过去就忘了. 学习是一个螺旋上升的过程,不要指望一下子 ...
- 8个对程序员来说有用的jQuery小贴士和技巧
1) 禁用鼠标右键单击 jQuery程序员可以使用此代码在网页上禁用鼠标右键点击. 1 2 3 4 5 6 7 8 9 10 $(document).ready(function() { // ...
- 《程序是怎样跑起来的》读书笔记——第一章 对程序员来说CPU是什么
1 程序的运行流程 2 CPU的组成 3 寄存器的主要种类和功能 "程序计数器"--决定程序流程的 4 条件分支和循环机制 4.1 顺序执行 4.2 选择分支 5 函数的调用机制 ...
随机推荐
- 快速入门分布式消息队列之 RabbitMQ(2)
目录 目录 前文列表 RabbitMQ 的特性 Message Acknowledgment 消息应答 Prefetch Count 预取数 RPC 远程过程调用 vhost 虚拟主机 插件系统 最后 ...
- 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第1节 基本概念_03maven一键构建概念
资料里面写好的Helloworld项目 pom.xml存放jar包的坐标 首先复制项目所在的目录的路径: 先进去复制的这个路径,然后又输入了d盘.这时候就进去到这个项目目录了. 这个项目就运行起来了. ...
- 《Using Python to Access Web Data》Week4 Programs that Surf the Web 课堂笔记
Coursera课程<Using Python to Access Web Data> 密歇根大学 Week4 Programs that Surf the Web 12.3 Unicod ...
- cocos2dx基础篇(19) 基本动作CCAction
[3.x] (1)去掉"CC" (2)新增了一些动作:(精力有限,新增的动作请自行摸索) > EaseBezierAction > EaseQuadra ...
- liteide使用中的注意点
liteide使用中的注意点 无法跳转 会出现无法跳转的情况,可能是这个包里面的某个文件会有错误,一般把这个包里的所有的错误都改正之后就能正常跳转了.Ubuntu中,直接按f2可以跳入,之后按住alt ...
- Git 创建分支并合并主分支
首先,我们创建dev分支,然后切换到dev分支: $ git checkout -b dev(等价于 $ git branch dev $ git checkout dev ) Switched to ...
- 并查集专题: HDU1232畅通工程
畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- Proxy does not work using sudo in Debian
To resolve this issue you can add Defaults env_keep += "http_proxy https_proxy" to your /e ...
- Dire Wolf——HDU5115(区间DP)
题意 就是有一对狼,每个狼有初始的攻击力,并且还能给左右两边的狼提供攻击力加成,当冒险家杀死一头狼的时候他也会受到这个狼目前攻击力的伤害 实例解析 33 5 78 2 0 有三头狼,刚开始第二头狼给他 ...
- html5酷炫效果链接收集
HTML5 3D图片相册图片轮播动画 http://www.html5tricks.com/demo/html5-3d-gallery-animation/index.html 36种漂亮的CSS ...