python穷举暴力破解《2018年刑侦推理题》

2018年刑侦推理题
python代码:

# 获取答案的所有排列组合
def get_all_str(str, num):
        if(num == 1):
            for x in str:
                yield x
        else:
            for x in str:
                for y in get_all_str(str, num-1):
                    yield x+y

strKey=['A', 'B', 'C', 'D']
answer_list = []
for x in get_all_str(strKey,10):
    answer_list.append(':'+x)  # 获得所有答案组合,从1开始计数
# 进行运算
for a in answer_list:
    if(a[2] == 'A' and a[5] == 'C') or (a[2] == 'B' and a[5] == 'D') or \
      (a[2] == 'C' and a[5] == 'A') or (a[2] == 'D' and a[5] == 'B'):
        if(a[3] == 'A' and a[3] != a[6] and a[3] != a[2] and a[3] != a[4]) or \
          (a[3] == 'B' and a[6] != a[3] and a[6] != a[2] and a[6] != a[4]) or \
          (a[3] == 'C' and a[2] != a[3] and a[2] != a[6] and a[2] != a[4]) or \
          (a[3] == 'D' and a[4] != a[3] and a[4] != a[6] and a[4] != a[2]):
            if(a[4] =='A' and a[1]==a[5] and a[2]!=a[7] and a[1]!=a[9] and a[6]!=a[10]) or \
              (a[4] =='B' and a[1]!=a[5] and a[2]==a[7] and a[1]!=a[9] and a[6]!=a[10]) or \
              (a[4] =='C' and a[1]!=a[5] and a[2]!=a[7] and a[1]==a[9] and a[6]!=a[10]) or \
              (a[4] =='D' and a[1]!=a[5] and a[2]!=a[7] and a[1]!=a[9] and a[6]==a[10]):
                if(a[5] =='A' and a[5]==a[8]) or (a[5] =='B' and a[5]==a[4]) or \
                  (a[5] =='C' and a[5]==a[9]) or (a[5] =='D' and a[5]==a[7]):
                    if(a[6] == 'A' and a[2]==a[4]==a[8]) or \
                      (a[6] == 'B' and a[1]==a[6]==a[8]) or \
                      (a[6] == 'C' and a[3]==a[10]==a[8]) or \
                      (a[6] == 'D' and a[5]==a[9]==a[8]):
                        if(a[8]=='A' and (strKey.index(a[7])-strKey.index(a[1]))!=1) or \
                          (a[8]=='B' and (strKey.index(a[5])-strKey.index(a[1]))!=1) or \
                          (a[8]=='C' and (strKey.index(a[2])-strKey.index(a[1]))!=1) or \
                          (a[8]=='D' and (strKey.index(a[10])-strKey.index(a[1]))!=1):
                            if(a[9]=='A' and (a[1]==a[6]) != (a[6]==a[5])) or \
                              (a[9]=='B' and (a[1]==a[6]) != (a[10]==a[5])) or \
                              (a[9]=='A' and (a[1]==a[6]) != (a[2]==a[5])) or \
                              (a[9]=='A' and (a[1]==a[6]) != (a[9]==a[5])):
                                num = []
                                for i in strKey:
                                    num.append(a.count(i))
                                if(a[7] == 'A' and strKey[num.index(min(num))]=='C') or \
                                  (a[7] == 'B' and strKey[num.index(min(num))]=='B') or \
                                  (a[7] == 'C' and strKey[num.index(min(num))]=='A') or \
                                  (a[7] == 'D' and strKey[num.index(min(num))]=='D'):
                                    if(a[10] == 'A' and (max(num)-min(num))==3) or \
                                      (a[10] == 'B' and (max(num)-min(num))==2) or \
                                      (a[10] == 'C' and (max(num)-min(num))==4) or \
                                      (a[10] == 'D' and (max(num)-min(num))==1):
                                        print('答案是' + a)
                               

运行结果:
运行结果

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定谔_51

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值