summaryrefslogtreecommitdiffstats
path: root/src/jrummikub/ai/fdsolver/constraint/OffsetConstraint.java
diff options
context:
space:
mode:
authorJannis Harder <harder@informatik.uni-luebeck.de>2011-06-14 17:48:26 +0200
committerJannis Harder <harder@informatik.uni-luebeck.de>2011-06-14 17:48:26 +0200
commit99c3d48f1021e59d8db0873ae9b626594954e44f (patch)
tree7ed622d1578c8225d27f49b3bef9400bd7054b3e /src/jrummikub/ai/fdsolver/constraint/OffsetConstraint.java
parent0a63df955ee7e748c43a0cd9303add78eda0018b (diff)
downloadJRummikub-99c3d48f1021e59d8db0873ae9b626594954e44f.tar
JRummikub-99c3d48f1021e59d8db0873ae9b626594954e44f.zip
Several speed optimizations
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@438 72836036-5685-4462-b002-a69064685172
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;