/* DONALD + GERALD = ROBERT problem in Picat. Classic alphametic problem. Model created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import cp. main => go. go ?=> X = [D,O,N,A,L,G,E,R,B,T], X :: 0..9, all_different(X), 100000*D + 10000*O + 1000*N + 100*A + 10*L + D + 100000*G + 10000*E + 1000*R + 100*A + 10*L + D #= 100000*R + 10000*O + 1000*B + 100*E + 10*R + T, D #> 0, G #> 0, R #> 0, solve([],X), writeln(X), fail, nl. go => true. go2 ?=> FD = [D,O,N,A,L,G,E,R,B,T], FD :: 0..9, Cs = [C1,C2,C3,C4,C5,C6], % carries Cs :: 0..1, all_different(FD), D + D #= 10 * C1 + T, C1 + L + L #= 10 * C2 + R, C2 + A + A #= 10 * C3 + E, C3 + N + R #= 10 * C4 + B, C4 + O + E #= 10 * C5 + O, C5 + D + G #= 10 * C6 + R, D #> 0, G #> 0, R #> 0, C6 #= 0, % must be 0 since R is the first digit Vars = FD ++ Cs, solve(Vars), println(fd=FD), println(cs=Cs), fail, nl. go2 => true.