最近网上很火的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']