Subversion Repositories programming

Rev

Blame | Last modification | View Log | RSS feed

/* ca1.pl */

/* an early version of cryptarithmetic --
   allows the same digit to be used more than once */

ca(L) :- write('     S  E  N  D  M  O  R  Y'),
         L = [S,E,N,D,M,O,R,Y],
         col( 0,D,E,Y,C1),
         col(C1,N,R,E,C2),
         col(C2,E,O,N,C3),
         col(C3,S,M,O,C4),
         col(C4,0,0,M, 0).

col(Ci,X,Y,Z,Co) :- carry(Ci),
                    digit(X),digit(Y),digit(Z),
                    carry(Co),
                    sum(Ci,X,Y,Z),
                    carry(Ci,X,Y,Co).

sum(Ci,X,Y,Z) :- Z is (Ci+X+Y) mod 10.

carry(Ci,X,Y,Z) :- Z is (Ci+X+Y) // 10.

digit(0).
digit(1).
digit(2).
digit(3).
digit(4).
digit(5).
digit(6).
digit(7).
digit(8).
digit(9).

carry(0).
carry(1).