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 71
|
/*-------------------------------------------------------------------------*/
/* Benchmark (Finite Domain) */
/* */
/* Name : send.pl */
/* Title : crypt-arithmetic */
/* Original Source: P. Van Hentenryck's book */
/* Adapted by : Daniel Diaz for GNU Prolog */
/* Date : September 1992 */
/* */
/* Solve the operation: */
/* */
/* S E N D */
/* + M O R E */
/* ----------- */
/* = M O N E Y */
/* */
/* (resolution by line) */
/* */
/* Solution: */
/* [S,E,N,D,M,O,R,Y] */
/* [9,5,6,7,1,0,8,2] */
/*-------------------------------------------------------------------------*/
q :-
get_fd_labeling(Lab),
statistics(runtime, _),
send(LD, Lab),
statistics(runtime, [_, Y]),
write(LD),
nl,
write('time : '),
write(Y),
nl.
send(LD, Lab) :-
LD = [S, E, N, D, M, O, R, Y],
fd_all_different(LD),
fd_domain(LD, 0, 9),
fd_domain([S, M], 1, 9),
1000 * S + 100 * E + 10 * N + D + 1000 * M + 100 * O + 10 * R + E #= 10000 * M + 1000 * O + 100 * N + 10 * E + Y,
lab(Lab, LD).
lab(normal, L) :-
fd_labeling(L).
lab(ff, L) :-
fd_labelingff(L).
get_fd_labeling(Lab) :-
argument_counter(C),
get_labeling1(C, Lab).
get_labeling1(1, normal).
get_labeling1(2, Lab) :-
argument_value(1, Lab).
:- initialization(q).
|