python - 穷举算法

穷举算法

字母代表0-9十个数字中的一个,且不重复。

wwwdot - google = dotcom

公式中首位不能为0

求出各个字母代表的数字,符合该公式。

 

W - 1-9

G - 1-9

D - 1-9

O - 0-9

T - 0-9

L - 0-9

E - 0-9

C - 0-9

M - 0-9

穷举以上。For循环。耗时太长,有1小时15分钟。

 

源代码:

# encoding=utf-8
import os
import time
from datetime import datetime

class data_struct():
    def __init__(self, letter, status):
        self.letter = letter
        self.status = status  # True表示字母在头部,不能为零, False时可以取零
        if self.status == False:
            self.digit = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  # 0-9
        else:
            self.digit = [1, 2, 3, 4, 5, 6, 7, 8, 9]  # 0-9

def norepeat(list0):
    length = len(list0)
    list1 = [0 for i in range(0,10,1)] # 取值0-9
    for i in range(0,length,1):
        list1[list0[i]] += 1
        if int(list1[list0[i]]) > 1:
            return False
    return True

if __name__ == '__main__':
    '''wwwdot - google = dotcom'''
    letterW = data_struct('W', True)
    letterG = data_struct('G', True)
    letterD = data_struct('D', True)
    letterO = data_struct('O', False)
    letterT = data_struct('T', False)
    letterL = data_struct('L', False)
    letterE = data_struct('E', False)
    letterC = data_struct('C', False)
    letterM = data_struct('M', False)

    # list0 = [1,2,3,4,5,6,0,8,9]
    # if True == norepeat(list0):
    #     print 'hello'


    str1 = ''
    str2 = ''
    str3 = ''
    begintime = datetime.now()
    for w in letterW.digit:
        for g in letterG.digit:
            for d in letterD.digit:
                for o in letterO.digit:
                    for t in letterT.digit:
                        for l in letterL.digit:
                            for e in letterE.digit:
                                for c in letterC.digit:
                                    for m in letterM.digit:
                                        list0 = [w, g, d, o, t, l ,e, c, m]
                                        if True == norepeat(list0):
                                            str1 = str(w)*3 + str(d) + str(o) + str(t)
                                            str2 = str(g) + str(o)*2 + str(g) + str(l) + str(e)
                                            str3 = str(d) + str(o) + str(t) + str(c) + str(o) + str(m)
                                            if int(str1) - int(str2) == int(str3):  # wwwdot - google = dotcom
                                                print str1, str2, str3
    endtime = datetime.now()
    deltatime = endtime - begintime
    print '穷举搜索耗时: ' , deltatime

'''
wwwdot - google = dotcom
777589 188103 589486
777589 188106 589483
穷举搜索耗时:  1:15:39.682000
'''

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值