Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

pl:prolog:pllib:cryptoarithmetic_puzzle_2 [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 +====== Cryptoarithmetic puzzle 2 ======
 +{{tag>​puzzle}}
 +===== Description =====
 +A program for cryptoarithmetic puzzles.
 +
 +**Source**: ​ PROLOG programming for artificial intelligence,​ 3rd Edition, Harlow, 2001, ISBN 0-201-40375-7.
 +===== Download =====
 +Program source code: {{cryptoarithmetic_puzzle_2.pl}}
 +===== Listing =====
 +<code prolog>
 +%  Figure 7.2  A program for cryptoarithmetic puzzles.
 +
 +
 +%    Solving cryptarithmetic puzzles
 +
 +sum(N1, N2, N)  :-                    % Numbers represented as lists of digits
 +  sum1( N1, N2, N, 
 + 0, 0,                         % Carries from right and to left both 0
 +        [0,​1,​2,​3,​4,​5,​6,​7,​8,​9],​ _).    % All digits available
 +
 +sum1( [], [], [], C, C, Digits, Digits).
 +
 +sum1( [D1|N1], [D2|N2], [D|N], C1, C, Digs1, Digs)  :-
 +  sum1( N1, N2, N, C1, C2, Digs1, Digs2),
 +  digitsum( D1, D2, C2, D, C, Digs2, Digs).
 +
 +digitsum( D1, D2, C1, D, C, Digs1, Digs)  :-
 +  del_var( D1, Digs1, Digs2), ​       % Select an available digit for D1
 +  del_var( D2, Digs2, Digs3), ​       % Select an available digit for D2
 +  del_var( D, Digs3, Digs), ​         % Select an available digit for D
 +  S  is  D1 + D2 + C1,    ​
 +  D  is  S mod 10,                   % Reminder
 +  C  is  S // 10.                    % Integer division
 +
 +del_var( A, L, L) :-
 +  nonvar(A), !.                      % A already instantiated
 +
 +del_var( A, [A|L], L).
 +
 +del_var( A, [B|L], [B|L1]) ​ :-
 +  del_var(A, L, L1).
 +
 +
 +% Some puzzles
 +
 +puzzle1( [D,​O,​N,​A,​L,​D],​
 +         ​[G,​E,​R,​A,​L,​D],​
 +         ​[R,​O,​B,​E,​R,​T] ).
 +
 +puzzle2( [0,​S,​E,​N,​D],​
 +         ​[0,​M,​O,​R,​E],​
 +         ​[M,​O,​N,​E,​Y] ).
 +</​code>​
 +===== Comments =====
  
pl/prolog/pllib/cryptoarithmetic_puzzle_2.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0