-
Notifications
You must be signed in to change notification settings - Fork 0
/
send_more_money.py
53 lines (46 loc) · 1.71 KB
/
send_more_money.py
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
from __future__ import print_function
from problem import Problem
from util_constraints import *
from constraintproblemsolver import ConstraintProblemSolver
variable_names = (
'S',
'E',
'N',
'D',
'M',
'O',
'R',
'Y'
)
def print_assignments(assignments):
try:
print (" {S}{E}{N}{D}".format(**assignments))
print (" + {M}{O}{R}{E}".format(**assignments))
print (" -----".format(**assignments))
print (" = {M}{O}{N}{E}{Y}".format(**assignments))
except (TypeError, KeyError):
print ("No Solution!")
constraints = [
alldiff(variable_names),
sum_modulo_ten_or_plus_one_constraint('D', 'E', 'Y'),
sum_modulo_ten_or_plus_one_constraint('N', 'R', 'E'),
sum_modulo_ten_or_plus_one_constraint('E', 'O', 'N'),
sum_modulo_ten_or_plus_one_constraint('S', 'M', 'O'),
Constraint(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, ('S', 'E', 'N', 'D', 'M', 'O', 'R', 'Y'))
]
if __name__ == "__main__":
problem = Problem()
problem.add_variables(('S',), range(0, 10))
problem.add_variables(('E',), range(0, 10))
problem.add_variables(('N',), range(0, 10))
problem.add_variables(('D',), range(0, 10))
problem.add_variables(('M',), range(1, 10))
problem.add_variables(('O',), range(0, 10))
problem.add_variables(('R',), range(0, 10))
problem.add_variables(('Y',), range(0, 10))
problem.add_constraints(constraints)
solver = ConstraintProblemSolver(problem)
assignments = solver.solve()
if assignments != None:
print("Failed Constraints: {}".format(problem.check_constraints(assignments)))
print_assignments(assignments)