3 ms·
Solution in Scala, with JaCoP: import org.jacop.scala._ object Main extends App with jacop { def forAll(l: Seq[BoolVar]) = l.foldLeft[BoolVar](true) {
by edejong 7y ago
Solution in Scala, with JaCoP:
import org.jacop.scala._
object Main extends App with jacop {
def forAll(l: Seq[BoolVar]) = l.foldLeft[BoolVar](true) { case (r, m) => r /\ m}
def forAny(l: Seq[BoolVar]) = l.foldLeft[BoolVar](false) { case (r, m) => r \/ m}
val v = List.tabulate(6)(i => new BoolVar(s"Answer ${i + 1}"))
v(0) #= forAll(v.drop(1))
v(1) #= ~forAny(v.drop(2))
v(2) #= forAll(v.take(2))
v(3) #= forAny(v.take(3))
v(4) #= ~forAny(v.take(4))
v(5) #= ~forAny(v.take(5))
satisfy(search(v, input_order, indomain_min))
print("Solution: " + v.filter(_.domain.contains(1)).map(_.id).mkString(" "))
}
Results in:
Solution: Answer 5