【发布时间】:2014-05-18 05:59:14
【问题描述】:
谜题下面的每个字母唯一地代表 0、1、...、9 中的 10 个数字之一。没有两个字母代表相同的数字。对于拼图中下面的每个单词,第一个字母不是 0。
例如:SHINE - THAN == KNIT
我所拥有的代码就是这个......
:- lib(ic).
exampleOne(List) :-
List = [S, H, I, N, E, T, A, K],
List :: 0..9,
diff_list(List),
(10000*S - 1000*H - 100*I - 10*N - E)
- (1000*T - 100*H - 10*A - N)
$= (1000*K - 100*N - 10*I - T),
S $\= 0, T $\= 0, K $\= 0,
shallow_backtrack(List).
shallow_backtrack(List) :-
( foreach(Var, List) do once(indomain(Var)) ).
diff_list(List) :-
( fromto(List, [X|Tail], Tail, []) do
( fromto(Y, Tail, param(X) do
X $\= Y
)
).
compareLists(List) :-
length(List, N),
( foreach(Input1, List), count(I, 1, N), param(N, List)
do
( foreach(Input2, List), count(J, 1, N), param(List, Input1, I, N)
do
( ( I $\= J, Input1 $\= Input2 )
-> true;
fail
)
)
).
我有点卡在这部分。因此,当我在没有 compareLists(List) 函数的情况下运行代码时,结果给我“否”。所以当我添加 compareLists(List) 函数时,答案仍然给我“否”。我想知道“否”是正确答案还是我在代码中写错了什么?任何帮助表示赞赏。谢谢!
谢谢!
【问题讨论】:
标签: prolog cryptarithmetic-puzzle eclipse-clp