Время выполнения криптограммы

На начальном курсе нас попросили сделать несколько классических криптограмм в Прологе. Все они работают, кроме этой, которая просто продолжается и не находит решения, кроме как попытка взорвать мой компьютер из-за перегрева:

Сорок + Десять + Десять = Шестьдесят

crypto2(F,O,R,T,Y,E,N,S,I,X) :-
  digit(F), digit(O), digit(R), digit(T), digit(Y), digit(E), digit(N), digit(S), digit(I), digit(X),
  F =\= O, F =\= R, F =\= T, F =\= Y, F =\= E, F =\= N, F =\= S, F =\= I, F =\= X,
  O =\= R, O =\= T, O =\= Y, O =\= E, O =\= N, O =\= S, O =\= I, O =\= X,
  R =\= T, R =\= Y, R =\= E, R =\= N, R =\= S, R =\= I, R =\= X,
  T =\= Y, T =\= E, T =\= N, T =\= S, T =\= I, T =\= X,
  Y =\= E, Y =\= N, Y =\= S, Y =\= I, Y =\= X,
  E =\= N, E =\= S, E =\= I, E =\= X,
  N =\= S, N =\= I, N =\= X,
  S =\= I, S =\= X,
  I =\= X,
  10000 * F + 1000 * O + 100 * R + 210 * T + Y + 20 * E + 2 * N =:= 10000 * S + 1000 * I + 100 * X + 10 * T + Y.

Все неравенства от цифры к цифре были написаны этим битом Python, чтобы исключить человеческую ошибку:

nbs = ["F", "O", "R", "T", "Y", "E", "N", "S", "I", "X"]
for i in range(len(nbs)):
  s= ""
  for j in range(i + 1, len(nbs)):
    s += nbs[i] + " =\= " + nbs[j] + ", "
  print s

Здесь не написана серия из десяти простых фактов (цифра (0). До цифры (9).), Утверждающих, что 0-9 являются цифрами.

Может кто-нибудь заметить явную ошибку, или она действительно занимает больше десяти минут, в то время как более простые шестизначные криптограммы решаются немедленно?

Спасибо!

1 ответ

Решение

Вы можете закрепить вещи, перемещая ограничения "сначала возможно":

crypto2(F,O,R,T,Y,E,N,S,I,X) :-
  digit(F),
  digit(O), F =\= O,
  digit(R), F =\= R, O =\= R,
  digit(T), F =\= T, ...
Другие вопросы по тегам