diff --git a/cp-demo/SatSolver.scala b/cp-demo/SatSolver.scala new file mode 100644 index 0000000000000000000000000000000000000000..698f6ea59c8dc2edc44528b8dc92ddf7cbc29af5 --- /dev/null +++ b/cp-demo/SatSolver.scala @@ -0,0 +1,23 @@ +import cp.Definitions._ +import cp.Terms._ + +object SatSolver extends App { + val problem : List[List[Int]] = List( + List(-1, 2, 3), + List(1, -2), + List(4) + ) + + type CM = Constraint1[Map[Int,Boolean]] + val solution : CM = + problem.foldLeft[CM]((m:Map[Int,Boolean]) => true)((cons:CM,clause:List[Int]) => cons && clause.foldLeft[CM]((m:Map[Int,Boolean]) => false)((cons:CM,lit:Int) => { + val isPos = lit > 0 + val abs = scala.math.abs(lit) + cons || ((m:Map[Int,Boolean]) => m(abs) == isPos) + })) + + val answer = solution.solve + println("Solution map : " + answer) + (1 to 4).foreach(i => println("i : " + answer(i))) + +}