【发布时间】:2022-10-15 09:03:53
【问题描述】:
我试图解决这个密码数学难题:
其中“*" 代表任何数字。
这是我到目前为止想出的代码。
permutation(Xs,[Z|Zs]) :-
delete(Z,Xs,Ys),
permutation(Ys,Zs).
delete(X,[X|Xs],Xs).
delete(X,[Y|Ys],[Y|Zs]) :-
delete(X,Ys,Zs).
ca(A, B, C, D, E, F, G, H, I, J) :-
permutation([1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
[A, B, C, D, E, F, G, H, I, J]),
(A*10000+B*1000+C*100+D*10+E*1) * (A * 1)
=:=
(_ * 100000 + _ * 10000 + H * 1000 + _ * 100 + _ * 10 + _ * 1).
我完全意识到 Prolog 不能简单地使用 _ 运算符解决这个等式。
我想弄清楚的是如何实现那些在我的代码中表示为单个下划线的不重要数字。
谢谢你的帮助。
【问题讨论】:
-
从
SEND + MORE = MONEYgithub.com/triska/clpfd/blob/master/sendmory.pl 获得灵感 -
这似乎是使用约束非常有用的问题,你应该看看clpfd
标签: prolog cryptarithmetic-puzzle