Крипто-арифметическая головоломка: САНТА-КЛАУС = РОЖДЕСТВО

#eclipse #prolog #puzzle #cryptarithmetic-puzzle

#затмение #пролог #Головоломка #криптоарифметическая головоломка

Вопрос:

Я пытаюсь решить загадку crypt-arithmetic: САНТА-КЛАУС = РОЖДЕСТВО в ECLIPSE Prolog. Я использую головоломку «ОТПРАВИТЬ БОЛЬШЕ = ДЕНЬГИ» в качестве руководства для этого. Моя проблема в том, что я не уверен, как реализовать «заимствование» части вычитания. Кроме того, существует перенос, который может быть добавлен к следующим условиям по мере продолжения добавления. Но при вычитании мы должны брать и вычитать десятки из числа, у которого вы заимствуете. Ниже приведен код для головоломки сложения, которую я использую в качестве руководства:

 solve([S,E,N,D,M,O,R,Y]) :-
    car(M), M > 0, car(C100),
    dig(S), S > 0,
    M is (S M C100) // 10, O is (S M C100) mod 10,
    dig(E), car(C10),
    N is (E O C10) mod 10, C100 is (E O C10) // 10,
    dig(R), car(C1),
    E is (N R C1) mod 10, C10 is (N R C1) // 10,
    dig(D),
    Y is (D E) mod 10, C1 is (D E) // 10,
    all_diff([S,E,N,D,M,O,R,Y]). 
    
car(0). car(1).

dig(0). dig(1). dig(2). dig(3). dig(4). 
dig(5). dig(6). dig(7). dig(8). dig(9).

all_diff([]).
all_diff([N|L]) :- not member(N,L), all_diff(L).

member(N,[N|L]). 
member(N,[M|L]) :- member(N,L).
  

Мне просто нужна помощь в понимании того, как реализовать заимствование при вычитании.

Комментарии:

1. Разве вы не можете просто реализовать это как САНТА = КЛАУС РОЖДЕСТВО?

2. Нет, к сожалению, нам приходится вычитать.

3. Мы можем помочь вам с вашим кодом, если вы пишете его, а он не работает. Я предлагаю это. Тем временем…

4. Напишите это на английском языке. Вот начало (на данный момент не указывая, должен ли я начинать с правой или левой стороны): CarryInRightColumn*10 A-S — это S. CarryInNextToRightColumn*10 T-U — это CarryInRightColumn . И так далее. Может помочь нарисовать это на бумаге с пробелами для переноса.

5. Спасибо за ваши предложения! Я смог реализовать это, используя вычитание слева направо, поскольку это упростило учет «заимствования».