[pypy-svn] r23511 - pypy/dist/pypy/lib/logic/computation_space

auc at codespeak.net auc at codespeak.net
Mon Feb 20 14:22:01 CET 2006


Author: auc
Date: Mon Feb 20 14:21:58 2006
New Revision: 23511

Modified:
   pypy/dist/pypy/lib/logic/computation_space/problems.py
Log:
add send more money problem


Modified: pypy/dist/pypy/lib/logic/computation_space/problems.py
==============================================================================
--- pypy/dist/pypy/lib/logic/computation_space/problems.py	(original)
+++ pypy/dist/pypy/lib/logic/computation_space/problems.py	Mon Feb 20 14:21:58 2006
@@ -50,6 +50,30 @@
     cs.set_distributor(di.DichotomyDistributor(cs))
     return (x, w, y)
 
+def send_more_money(computation_space):
+    cs = computation_space
+
+    variables = (s, e, n, d, m, o, r, y) = cs.make_vars('s', 'e', 'n', 'd', 'm', 'o', 'r', 'y')
+
+    digits = range(10)
+    for var in variables:
+        var.cs_set_dom(cs, c.FiniteDomain(digits))
+
+    # use fd.AllDistinct
+    for v1 in variables:
+        for v2 in variables:
+            if v1 != v2:
+                cs.add_constraint(c.Expression(cs, [v1, v2], '%s != %s' % (v1.name, v2.name)))
+
+    # use fd.NotEquals
+    cs.add_constraint(c.Expression(cs, [s], 's != 0'))
+    cs.add_constraint(c.Expression(cs, [m], 'm != 0'))
+    cs.add_constraint(c.Expression(cs, [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'))
+    cs.set_distributor(di.DichotomyDistributor(cs))
+    print cs.constraints
+    return (s, e, n, d, m, o, r, y)
+
 def conference_scheduling(computation_space):
     cs = computation_space
 
@@ -66,15 +90,18 @@
 
     for conf in ('c03','c04','c05','c06'):
         v = cs.get_var_by_name(conf)
-        cs.add_constraint(c.Expression(cs, [v], "%s[0] == 'room C'" % v.name))
+        cs.add_constraint(c.Expression(cs, [v],
+                                       "%s[0] == 'room C'" % v.name))
 
     for conf in ('c01','c05','c10'):
         v = cs.get_var_by_name(conf)
-        cs.add_constraint(c.Expression(cs, [v], "%s[1].startswith('day 1')" % v.name))
+        cs.add_constraint(c.Expression(cs, [v],
+                                       "%s[1].startswith('day 1')" % v.name))
 
     for conf in ('c02','c03','c04','c09'):
         v = cs.get_var_by_name(conf)
-        cs.add_constraint(c.Expression(cs, [v], "%s[1].startswith('day 2')" % v.name))
+        cs.add_constraint(c.Expression(cs, [v],
+                                       "%s[1].startswith('day 2')" % v.name))
 
     groups = (('c01','c02','c03','c10'),
               ('c02','c06','c08','c09'),



More information about the Pypy-commit mailing list