Subversion Repositories programming

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
107 ira 1
/* ca1.pl */
2
 
3
/* an early version of cryptarithmetic --
4
   allows the same digit to be used more than once */
5
 
6
ca(L) :- write('     S  E  N  D  M  O  R  Y'),
7
         L = [S,E,N,D,M,O,R,Y],
8
         col( 0,D,E,Y,C1),
9
         col(C1,N,R,E,C2),
10
         col(C2,E,O,N,C3),
11
         col(C3,S,M,O,C4),
12
         col(C4,0,0,M, 0).
13
 
14
col(Ci,X,Y,Z,Co) :- carry(Ci),
15
                    digit(X),digit(Y),digit(Z),
16
                    carry(Co),
17
                    sum(Ci,X,Y,Z),
18
                    carry(Ci,X,Y,Co).
19
 
20
sum(Ci,X,Y,Z) :- Z is (Ci+X+Y) mod 10.
21
 
22
carry(Ci,X,Y,Z) :- Z is (Ci+X+Y) // 10.
23
 
24
digit(0).
25
digit(1).
26
digit(2).
27
digit(3).
28
digit(4).
29
digit(5).
30
digit(6).
31
digit(7).
32
digit(8).
33
digit(9).
34
 
35
carry(0).
36
carry(1).
37