summaryrefslogtreecommitdiffstats
path: root/src/jrummikub/ai/fdsolver/constraint/OffsetConstraint.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jrummikub/ai/fdsolver/constraint/OffsetConstraint.java')
-rw-r--r--src/jrummikub/ai/fdsolver/constraint/OffsetConstraint.java23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/jrummikub/ai/fdsolver/constraint/OffsetConstraint.java b/src/jrummikub/ai/fdsolver/constraint/OffsetConstraint.java
index a324d2a..eb72df8 100644
--- a/src/jrummikub/ai/fdsolver/constraint/OffsetConstraint.java
+++ b/src/jrummikub/ai/fdsolver/constraint/OffsetConstraint.java
@@ -2,6 +2,7 @@ package jrummikub.ai.fdsolver.constraint;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
@@ -60,12 +61,24 @@ public class OffsetConstraint extends Constraint {
@Override
public Satisfiability getSatisfiability() {
- HashSet<Integer> shiftedRange = new HashSet<Integer>();
- for (int val : x.getRange()) {
- shiftedRange.add(val + offset);
+ boolean disjoint = true;
+ if (x.getRange().size() < y.getRange().size()) {
+ for (int xv : x.getRange()) {
+ if (y.getRange().contains(xv + offset)) {
+ disjoint = false;
+ break;
+ }
+ }
+ } else {
+ for (int yv : y.getRange()) {
+ if (x.getRange().contains(yv - offset)) {
+ disjoint = false;
+ break;
+ }
+ }
}
- shiftedRange.retainAll(y.getRange());
- if (shiftedRange.isEmpty()) {
+
+ if (disjoint) {
return Satisfiability.UNSAT;
} else if (x.getRange().size() == 1 && y.getRange().size() == 1) {
return Satisfiability.TAUT;