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

原文地址:https://www.cnblogs.com/seyjs/p/8491767.html