File: sendmore.pl

package info (click to toggle)
gprolog 1.3.0-6
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 12,708 kB
  • ctags: 8,388
  • sloc: ansic: 57,431; perl: 16,620; sh: 5,900; makefile: 1,284
file content (70 lines) | stat: -rw-r--r-- 1,189 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70

% Cryptoaddition:
% Find the unique answer to:
%  SEND
% +MORE
% -----
% MONEY
% where each letter is a distinct digit.



sendmore(ShowResult) :-
	digit(D), digit(E), D=\=E,
	sumdigit(0, D, E, Y, C1),
	digit(N), N=\=Y, N=\=E, N=\=D,
	digit(R), R=\=N, R=\=Y, R=\=E, R=\=D,
	sumdigit(C1,N, R, E, C2),
	digit(O), O=\=R, O=\=N, O=\=Y, O=\=E, O=\=D,
	sumdigit(C2,E, O, N, C3),
	leftdigit(S), S=\=O, S=\=R, S=\=N, S=\=Y, S=\=E, S=\=D,
	leftdigit(M), M=\=S, M=\=O, M=\=R, M=\=N, M=\=Y, M=\=E, M=\=D,
	sumdigit(C3,S, M, O, M),
	(   ShowResult = true ->
	    write(' '),write(S),write(E),write(N),write(D),nl,
	    write('+'),write(M),write(O),write(R),write(E),nl,
	    write('-----'),nl,
	    write(M),write(O),write(N),write(E),write(Y),nl,nl
	;   true),
	fail.

sendmore(_).

sumdigit(C, A, B, S, D) :-
	X is (C+A+B),
	(X<10
	-> S=X,       D=0
	;  S is X-10, D=1
	).

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

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



% benchmark interface

benchmark(ShowResult) :-
	sendmore(ShowResult).

:- include(common).