{ Several variations of the same problem: replace all letters with numbers so the equation is true. These problems are solved by asking a query all Send(send,more,money) all CrossRoads(cross,roads,danger) all Donald(donald,gerald,robert) Note: It can take several minutes to calculate for some of the queries, depending on the CPU speed. } Digit = L[0..9] { SEND + MORE = MONEY Solution: send = 9567 more = 1085 money = 10652 backtracks: 7(solution)/24(total) } pred Send(send::L,more::L,money::L) iff send + more = money & a::[0..7]->>Digit & a = [s,e,n,d,m,o,r,y] & m <> 0 & s <> 0 & {no leading zeros} send = 1000*s + 100*e + 10*n + d & more = 1000*m + 100*o + 10*r + e & money = 10000*m + 1000*o + 100*n + 10*e + y { CROSS + ROADS = DANGER Solution: cross = 96233 roads = 62513 danger = 158746 backtracks: 178776(solution)/223059(total) } pred CrossRoads(cross::L, roads::L, danger::L) iff cross + roads = danger & aa::[0..]->>Digit & aa = [c,r,o,s,a,d,n,g,e] & r <> 0 & s <> 0 & c <> 0 & {no leading zeros} cross = 10000*c + 1000*r + 100*o + 10*s + s & roads = 10000*r + 1000*o + 100*a + 10*d + s & danger = 100000*d + 10000*a + 1000*n + 100*g + 10*e + r { DONALD + GERALD = ROBERT Solution: donald = 526485 gerald = 197485 robert = 723970 backtracks: 574502(solution)/900554(total) } pred Donald(donald::L,gerald::L,robert::L) iff donald + gerald = robert & aa::[0..9]->>Digit & aa = [l,a,b,n,e,o,r,g,d,t] & d <> 0 & g <> 0 & r <> 0 & {no leading zeros} donald = 100000*d + 10000*o + 1000*n + 100*a + 10*l + d & gerald = 100000*g + 10000*e + 1000*r + 100*a + 10*l + d & robert = 100000*r + 10000*o + 1000*b + 100*e + 10*r + t
This page was created by F1toHTML