在python中查找crypt方程的解

时间:2016-10-18 10:35:52

标签: python python-3.x cryptography combinations

考虑方程ABCBA = D * BE * BFFA。任务是确定哪个是不同数字的A,B,C,D,E和F.具有数值的等式是91819 = 7 * 13 * 1009,因此程序应该打印{' A'' B':' C' :8,' D':7,' E':3,' F':0}。 这是我做的代码

result=[]
for A in range (10):
    for B in range(10):
        for C in range(10):
            for D in range(10):
                for E in range(10):
                   for F in range(10):
                       if int(str(A)+str(B)+str(C)+str(B)+str(A)) == D * int(str(B)+str(E)) * int(str(B)+str(F)+str(F)+str(A)):
                             result.append({'A':A,'B':B,'C':C,'D':D,'E':E,'F':F})
print((result[len(result)-1]))

现在它适用于示例中的等式。如何修改我的代码,以便它适用于任何由用户输入的等式?

2 个答案:

答案 0 :(得分:0)

如果您只需要上一次输出并想要丢弃其他所有内容,则可以一遍又一遍地覆盖同一个变量:

result = {}
for B in range(10):
    for C in range(10):
        for D in range(10):
            for E in range(10):
                for F in range(10):
                    if int(str(A)+str(B)+str(C)+str(B)+str(A)) == D * int(str(B)+str(E)) * int(str(B)+str(F)+str(F)+str(A)):
                        result = {'A':A,'B':B,'C':C,'D':D,'E':E,'F':F}

pprint(result)

如果您想保留所有结果但只打印最后一个结果,请使用列表:

result = []
for B in range(10):
    for C in range(10):
        for D in range(10):
            for E in range(10):
                for F in range(10):
                    if int(str(A)+str(B)+str(C)+str(B)+str(A)) == D * int(str(B)+str(E)) * int(str(B)+str(F)+str(F)+str(A)):
                        result.append({'A':A,'B':B,'C':C,'D':D,'E':E,'F':F})

pprint(result[-1])

答案 1 :(得分:0)

我认为@Khris的答案是100%正确的,因为你需要A的循环,并且你的原始问题列出了任何数字的第一个数字不能为0;因此ABD不能为0,因此为此添加了if A and D and B:

然后导致(打印所有结果,你可以从那里选择):

from pprint import pprint

results = []
for A in range(10):
    for B in range(10):
        for C in range(10):
            for D in range(10):
                for E in range(10):
                    for F in range(10):
                        if A and D and B:
                            if int(str(A)+str(B)+str(C)+str(B)+str(A)) == D * int(str(B)+str(E)) * int(str(B)+str(F)+str(F)+str(A)):
                                results.append({'A':A,'B':B,'C':C,'D':D,'E':E,'F':F})

for result in results:
    pprint(result)

您进一步说明以下内容:

  

pprint的许多输出中的最后一个给出了正确的结果。可以   有人编辑它只打印最后(正确)的结果吗?

根据等式ABCBA = D * BE * BFFA,这是不正确的:以下结果都是有效的:

{'A': 1, 'B': 1, 'C': 0, 'D': 1, 'E': 1, 'F': 0}  # 11011 = 1 * 11 * 1001 
{'A': 2, 'B': 1, 'C': 3, 'D': 1, 'E': 6, 'F': 3}  # 21312 = 1 * 16 * 1332 
{'A': 2, 'B': 1, 'C': 9, 'D': 1, 'E': 1, 'F': 9}  # 21912 = 1 * 11 * 1992 
{'A': 5, 'B': 1, 'C': 3, 'D': 3, 'E': 1, 'F': 5}  # 51315 = 3 * 11 * 1555 
{'A': 9, 'B': 1, 'C': 8, 'D': 7, 'E': 3, 'F': 0}  # 91819 = 7 * 13 * 1009