У меня есть понимание идеи арифметики склепа и сложения, но я не могу понять, как решить арифметическую задачу с умножением. Это просто ДВА * ШЕСТЬ = ДВЕНАДЦАТЬ или что-то в этом роде без средней дополнительной части задачи на умножение. Я ничего не смог найти в Интернете, и я уже нашел некоторые ограничения для проблемы, но ничто не привело меня к некоторым ответам. Не знаю, где спросить об этом, и подумал, что это будет лучшее место.
Я хочу знать, как решить арифметическую задачу с умножением.
Я уже сделал вывод:
T W O
* S I X
_________________
T W E L V E
T \= 0 which also means S \= 0
T is 1-6
E is (O*X) mod 10
O or X cannot be 0 or 1 since E has to be different and 0 or 1 gives the same value
as either O or X.
РЕДАКТИРОВАТЬ: я использовал метод генерации и тестирования
solve(T,W,O,S,I,X,E,L,V) :-
X = [T,W,O,S,I,X,E,L,V],
Digits = [0,1,2,3,4,5,6,7,8,9],
assign_digits(X, Digits),
T > 0,
S > 0,
100*T + 10*W + O * 100*S + 10*I + X =:=
100000*T + 10000*W + 1000*E + 100*L + 10*V + E,
write(X).
select(X, [X|R], R).
select(X, [Y|Xs], [Y|Ys]):- select(X, Xs, Ys).
assign_digits([], _List).
assign_digits([D|Ds], List):-
select(D, List, NewList),
assign_digits(Ds, NewList).