刑警题暴力破解脚本

网上看见的,下面是代码(写的很烂)

# -*- coding:utf-8 -*-
import sys
sys.setrecursionlimit(1000000)
let=['A','B','C','D']
#题目选项
n3=[2,5,1,3]
n4=[[0,4],[1,6],[0,8],[5,9]]
n5=[7,3,8,6]
n6=[[1,3],[0,5],[2,9],[4,8]]
n7=['C','B','A','D']
n8=[6,4,1,9]
n9=[5,9,1,8]
n10=[3,2,4,1]
s=[]
def dfs (index=0):#深度优先遍历
    global s
    if index==10:
        juduge(s)
        return
    for i in range(4):
        s.append(chr(ord('A')+i))
        dfs(index+1)
        s.pop(-1)
def juduge(s):
    n=[s.count('A'),s.count('B'),s.count('C'),s.count('D')]
    if ord(s[4])-ord(s[1])!=2 and ord(s[4])-ord(s[1])!=-2:#第二题
        return
    n33=n3[:]
    n33.remove(n3[ord(s[2])-ord('A')])#第三题
    if s[n3[ord(s[2])-ord('A')]] == s[n33[0]] or s[n3[ord(s[2])-ord('A')]] == s[n33[1]] or s[n3[ord(s[2])-ord('A')]] == s[n33[2]]:
        return
    if s[n4[ord(s[3])-ord('A')][0]] != s[n4[ord(s[3])-ord('A')][1]]:#第四题
        return
    if s[n5[ord(s[4])-ord('A')]] != s[4]:#第五题
        return
    if s[n6[ord(s[5])-ord('A')][0]]!=s[n6[ord(s[5])-ord('A')][1]]:#第六题
        return
    elif s[n6[ord(s[5])-ord('A')][0]]!=s[7]:
        return    
    if n.count(min(n))==1:#第七题
        if n7[ord(s[6])-ord('A')]!= let[n.index(min(n))]:
            return
    elif n.count(min(n))==2:
        if n7[ord(s[6])-ord('A')]!= let[n.index(min(n))] and n7[ord(s[6])-ord('A')]!= let[n.index(min(n),n.index(min(n)))]:
            return
    elif n.count(min(n))==3:
        if n7[ord(s[6])-ord('A')]!= let[n.index(min(n))] and n7[ord(s[6])-ord('A')]!= let[n.index(min(n),n.index(min(n)))] and n7[ord(s[6])-ord('A')]!= let[n.index(min(n),n.index(min(n),n.index(min(n))))]:
            return
    n91=[s[0]==s[5],s[n9[ord(s[8])-ord('A')]] == s[4]]#第九题
    if not(n91[0]^n91[1]):
        return
    if ord(s[n8[ord(s[7])-ord('A')]])-ord(s[0])==1 or ord(s[n8[ord(s[7])-ord('A')]])-ord(s[0])==-1:#第八题
        return  
    if n10[ord(s[9])-ord('A')]!=(max(n)-min(n)):#第十题
        return  
    print s



'''
s=''
for a in range(4):
    for b in range(4):
        for c in range(4):
            for d in range(4):
                for e in range(4):
                    for f in range(4):
                        for g in range(4):
                            for h in range(4):
                                for i in range(4):
                                    for j in range(4):
                                        s+=chr(ord('A')+a)
                                        s+=chr(ord('A')+b)
                                        s+=chr(ord('A')+c)
                                        s+=chr(ord('A')+d)   
                                        s+=chr(ord('A')+e)
                                        s+=chr(ord('A')+f)
                                        s+=chr(ord('A')+g)
                                        s+=chr(ord('A')+h)
                                        s+=chr(ord('A')+i)
                                        s+=chr(ord('A')+j)
                                        juduge(s)         
                                        s='''''#循环穷举
dfs(0)
print 'finish'
原文地址:https://www.cnblogs.com/kagari/p/8495629.html