パズルの下にあるすべての文字は、0、1、…、9 の 10 桁の数字の 1 つを一意に表します。2 つの文字が同じ数字を表すことはありません。パズルの下にある各単語の最初の文字は 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) 関数を追加しても、答えは「いいえ」です。「いいえ」が正しい答えなのか、それともコードに何か間違ったことを書いたのか疑問に思っていましたか? どんな助けでも大歓迎です。ありがとう!
ありがとう!