You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
typesetting/csp/port2/python-constraint-master/examples/wordmath/sendmoremoney.py

43 lines
1.4 KiB
Python

#!/usr/bin/python
#
# Assign equal values to equal letters, and different values to
# different letters, in a way that satisfies the following sum:
#
# SEND
# + MORE
# ------
# MONEY
#
from constraint import Problem, NotInSetConstraint, AllDifferentConstraint
def solve():
problem = Problem()
problem.addVariables("sendmory", range(10))
problem.addConstraint(lambda d, e, y: (d + e) % 10 == y, "dey")
problem.addConstraint(lambda n, d, r, e, y: (n * 10 + d + r * 10 + e) % 100 ==
e * 10 + y, "ndrey")
problem.addConstraint(lambda e, n, d, o, r, y:
(e * 100 + n * 10 + d + o * 100 + r * 10 + e) % 1000 ==
n * 100 + e * 10 + y, "endory")
problem.addConstraint(lambda s, e, n, d, m, o, r, y:
1000 * s + 100 * e + 10 * n + d + 1000 * m + 100 * o + 10 * r + e ==
10000 * m + 1000 * o + 100 * n + 10 * e + y, "sendmory")
problem.addConstraint(NotInSetConstraint([0]), "sm")
problem.addConstraint(AllDifferentConstraint())
solutions = problem.getSolutions()
return solutions
def main():
solutions = solve()
print("SEND+MORE=MONEY")
for s in solutions:
print("%(s)d%(e)d%(n)d%(d)d+"
"%(m)d%(o)d%(r)d%(e)d="
"%(m)d%(o)d%(n)d%(e)d%(y)d" % s)
if __name__ == "__main__":
main()