Różnice

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

 — 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 ===== + + %  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] ). + ​ + ===== Comments =====
pl/prolog/pllib/cryptoarithmetic_puzzle_2.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)