1. 程式人生 > >【python】對於程式設計師來說,2018刑偵科推理試卷是問題麼?

【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']

相關推薦

no