使代码更快地解决给定方程中哪个字母代表哪个数字

问题描述 投票:0回答:1

我要参加一个数学竞赛,可以通过编写程序来解决问题。

代码试图解决这个问题:

WHITE+WATER=PICNIC,其中每个不同的字母代表不同的数字。找到 PICNIC 代表的数字。

不允许导入(tqdm 只是一个进度条)。我尝试过的如下。以我的计算机的运行速度来说,它对于时代竞争来说还不够快,因为它需要范围超过 10 的数字次方。

这个问题有明确的解决方案吗?

from tqdm import tqdm

def find_solution():
    for W in tqdm(range(10)):
        for H in tqdm(range(10), desc='H'):
            for I in tqdm(range(10), desc='I'):
                for T in tqdm(range(10)):
                    for E in tqdm(range(10)):
                        for A in (range(10)):
                            for R in (range(10)):
                                for P in (range(1, 10)): # P cannot be 0
                                    for C in (range(10)):
                                        for N in (range(10)):
                                            white = W * 10000 + H * 1000 + I * 100 + T * 10 + E
                                            water = W * 10000 + A * 1000 + T * 100 + E * 10 + R
                                            picnic = P * 100000 + I * 10000 + C * 1000 + N * 100 + I * 10 + C

                                            if white + water == picnic:
                                                return {'W': W, 'H': H, 'I': I, 'T': T, 'E': E, 'A': A, 'R': R, 'P': P, 'C': C, 'N': N}

    return None

solution = find_solution()

if solution:
    print("Solution found:")
    print(solution)
else:
    print("No solution found.")
python optimization
1个回答
0
投票

我删除了 tqdm 导入,并用常规范围循环替换了嵌套的 tqdm 循环。这应该使代码更简单、更快,而无需使用任何外部导入。

def find_solution():
for W in range(10):
    for H in range(10):
        for I in range(10):
            for T in range(10):
                for E in range(10):
                    for A in range(10):
                        for R in range(10):
                            for P in range(1, 10):  # P cannot be 0
                                for C in range(10):
                                    for N in range(10):
                                        white = W * 10000 + H * 1000 + I * 100 + T * 10 + E
                                        water = W * 10000 + A * 1000 + T * 100 + E * 10 + R
                                        picnic = P * 100000 + I * 10000 + C * 1000 + N * 100 + I * 10 + C

                                        if white + water == picnic:
                                            return {'W': W, 'H': H, 'I': I, 'T': T, 'E': E, 'A': A, 'R': R, 'P': P, 'C': C, 'N': N}

return None

解决方案 = find_solution()

如果解决方案: print("找到解决方案:") 打印(解决方案) 别的: print("没有找到解决方案。")

我希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.