gpt4 book ai didi

prolog - 如何解决 Prolog 中的密码谜题

转载 作者:行者123 更新时间:2023-12-04 19:12:09 25 4
gpt4 key购买 nike

我必须编写一个 Prolog 程序来解决密码谜题。

我需要编写一个函数 solve([A, M, P, D, Y]) 将变量 [A, M, P, D, Y] 分配给从 0 到 9 的值,以便它满足方程 AM+PM =天。每个变量被赋予不同的值,A、P、D不能等于0。

我开始编写这个函数,但在运行我的程序时遇到了问题。我将 A、P 和 D 的限制设置为不为零。当我在研究算法时,我意识到 D 必须是 1,所以我在程序的开头定义了它。我为 M 定义了两个不同的变量(M1 和 M2),并将它们设置为彼此相等,因为拼图中不同的 M 应该分配给相同的值。我为不同的变量分配了位置,并根据谜题将它们相加。我考虑了携带进位变量的任何变量。我的程序可以编译,但函数没有执行。

solve([A, M1, M2, P, D, Y]):- D is 1,
A/=0,
P/=0,
D/=0,
M1 = M2,
select(M1, [0,2,3,4,5,6,7,8,9], R1),
select(M2, R1, R2),
Y is (M1+M2) mod 10,
C1 is (M1+M2) // 10,
select(Y, R2, R3),
select(A, R3, R4),
select(P, R4, R5),
select(D, R5, R6),
A is (A+P+C1) mod 10,
D is (A+P+C1)// 10.

我究竟做错了什么?我的变量定义有问题吗?我需要定义两个不同的 M 变量,还是一个就足够了?

最佳答案

这是我为您的谜题提供的解决方案。我们只是依靠 PROLOG 的回溯。我们首先选择所有变量,然后检查拼图条件。我不认为你需要定义两个女士。

solve([A,M,P,D,Y]):- 
select(A,[0,1,2,3,4,5,6,7,8,9],WA), % W means Without
not(A=0),
select(M,WA,WMA),
select(P,WMA,WMAP),
not(P=0),
select(D,WMAP,WMAPD),
not(D=0),
select(Y,WMAPD,WMAPDY),
DAY is 100*D+10*A+Y,
AM is 10*A+M,
PM is 10*P+M,
DAY is AM+PM.

关于prolog - 如何解决 Prolog 中的密码谜题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13870983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com