ONE +
ONE +
TWO =
______
FOUR
Может кто-нибудь может решить эту cryptarithmetic в шаг за шагом процесс СпасибоGeneric cryptarithmetic головоломки спросил моего экзамена
ONE +
ONE +
TWO =
______
FOUR
Может кто-нибудь может решить эту cryptarithmetic в шаг за шагом процесс СпасибоGeneric cryptarithmetic головоломки спросил моего экзамена
Пролог может это сделать! (После того, как все это Stackoverflow и вы отметили свой вопрос artificial-intelligence)
solution(O, N, E, T, W, F, U, R) :-
/* All different */
select(O, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], L1),
select(N, L1, L2),
select(E, L2, L3),
select(T, L3, L4),
select(W, L4, L5),
select(F, L5, L6),
select(U, L6, L7),
member(R, L7),
/* Constraints */
FOUR is F * 1000 + O * 100 + U * 10 + R,
ONE is O * 100 + N * 10 + E,
TWO is T * 100 + W * 10 + O,
FOUR is ONE + ONE + TWO.
Общая идея заключается в том, чтобы выбрать все переменные в первом, а затем проверить условие головоломки.
Теперь
?- solution(O,N,E,T,W,F,U,R).
напечатает первое найденное решение. С:
?- aggregate_all(count, (solution(O,N,E,T,W,F,U,R)), Count).
Вы можете видеть, что есть 173
различных решений.
Отслеживание выполнения запроса позволяет вам видеть все цели, которые выполняются как часть запроса, последовательно, вместе с тем, успешно ли они выполняются (это также позволяет вам видеть, какие шаги происходят, когда Prolog backtracks):
?- trace, solution(O,N,E,T,W,F,U,R).
(вы можете использовать платформу online SWI-Prolog играть с примером).
Традиционно (в verbal arithmetic):
каждая буква должна представлять собой другую цифру, и (как и в обычной арифметической нотации) ведущая цифра мульти-значное число в не должен быть равен нулю. Хорошая головоломка должна иметь уникальное решение, и буквы должны составлять фразу.
Вы можете заставить «ведущей цифры не должен быть равен нулю» -правило добавив:
not(O = 0), not(T = 0), not(F = 0).
в любом случае задача имеет несколько решений.
Ваш вопрос интересный, но вы должны хотя бы попробовать свои собственные. –