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

  • 相关阅读:
    干货:分布式系统详解
    如果有人问你数据库的原理,叫他看这篇文章
    MySQL的B树索引与索引优化
    优化网站性能必备的6种架构方案,你知道吗?
    【干货】手把手教你搭建一套可自动化构建的微服务框架
    你真的理解微服务架构吗
    Android Activity 半透明效果(Translucent)
    Android DatepickerDialog(日期选择器)的使用
    Android搜索自动提示功能 AutocompleteTextView
    Android动态加载ListView中的Item
  • 原文地址:https://www.cnblogs.com/seyjs/p/8491767.html
Copyright © 2020-2023  润新知