1

パズルの下にあるすべての文字は、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) 関数を追加しても、答えは「いいえ」です。「いいえ」が正しい答えなのか、それともコードに何か間違ったことを書いたのか疑問に思っていましたか? どんな助けでも大歓迎です。ありがとう!

ありがとう!

4

1 に答える 1