-3
A
답변
0
프롤로그가 그것을 할 수 있습니다 감사합니다 단계 프로세스 단계에서이 cryptarithmetic를 해결할 수 있습니다!
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.
일반적인 아이디어는 처음에 모든 변수를 선택하고 퍼즐 조건을 확인하는 것입니다 (이 후 artificial-intelligence 유래 그리고 당신은 당신의 질문을 태그 한).
지금?- solution(O,N,E,T,W,F,U,R).
발견 된 최초의 솔루션을 인쇄합니다. 다음을 포함합니다 :
?- aggregate_all(count, (solution(O,N,E,T,W,F,U,R)), Count).
173
개의 고유 솔루션이 있음을 알 수 있습니다.
쿼리 실행을 추적하면 성공 여부와 함께 쿼리의 일부로 실행 된 모든 목표를 볼 수 있습니다 (또한 Prolog 백 트랙으로 어떤 단계가 발생하는지 볼 수 있습니다)) :
?- trace, solution(O,N,E,T,W,F,U,R).
(당신이 예제를 재생하기 위해 online SWI-Prolog 플랫폼을 사용할 수 있습니다). 전통적 (verbal arithmetic)에
:
각 문자 (통상 산술 표기법으로) 다른 디지트를 나타내고, 있어야 다중 자리 숫자의 선두 숫자 제로이어야한다. 좋은 퍼즐은 독특한 해결책을 가져야하며, 편지는 문구를 구성해야합니다.
당신은 - 규칙 추가 "제로가 아니어야 최고의 자리"를 강제 할 수 있습니다 :
not(O = 0), not(T = 0), not(F = 0).
어쨌든 문제는 여러 솔루션을 제공합니다.
귀하의 질문은 흥미 롭습니다.하지만 적어도 자신의 것을 시도해보십시오. –