diff --git a/src/main/java/net/berack/upo/ai/problem1/Puzzle8.java b/src/main/java/net/berack/upo/ai/problem1/Puzzle8.java index 6a82935..6c7eae4 100644 --- a/src/main/java/net/berack/upo/ai/problem1/Puzzle8.java +++ b/src/main/java/net/berack/upo/ai/problem1/Puzzle8.java @@ -26,8 +26,9 @@ public class Puzzle8 implements Iterable { for(var i = 0; i < n; i++) index[p1.puzzle[i]] = i; for(var i = 0; i < n; i++) { var curr = p2.puzzle[i]; - var i2 = index[curr]; + if(curr == 0) continue; + var i2 = index[curr]; sum += Math.abs((i / LENGTH) - (i2 / LENGTH)) + Math.abs((i % LENGTH) - (i2 % LENGTH)); } return sum; @@ -265,7 +266,7 @@ public class Puzzle8 implements Iterable { public List solve(Puzzle8 goal) { if(!this.isSolvable(goal)) return null; - var aStar = new AStar(Puzzle8::availableMoves, (p, m) -> new Puzzle8(p, m)); + var aStar = new AStar(Puzzle8::availableMoves, Puzzle8::new); aStar.setHeuristic(HEURISTIC_MANHATTAN); return aStar.solve(this, Objects.requireNonNull(goal)); diff --git a/src/test/java/net/berack/upo/ai/problem1/TestPuzzle.java b/src/test/java/net/berack/upo/ai/problem1/TestPuzzle.java index 040f800..2343bb7 100644 --- a/src/test/java/net/berack/upo/ai/problem1/TestPuzzle.java +++ b/src/test/java/net/berack/upo/ai/problem1/TestPuzzle.java @@ -126,11 +126,8 @@ public class TestPuzzle { public void testSolve() { var puzzle = new Puzzle8(3,5,6,1,2,4,0,7,8); var puzzleGoal = new Puzzle8(1,2,3,4,5,6,7,8,0); - var solution = new Puzzle8.Move[] {RIGHT, UP, RIGHT, UP, LEFT, LEFT, DOWN, RIGHT, DOWN, RIGHT, UP, UP, LEFT, DOWN, RIGHT, DOWN}; var actual = puzzle.solve(puzzleGoal).toArray(new Puzzle8.Move[0]); - assertArrayEquals(solution, actual); - for(var move : actual) puzzle.move(move); assertEquals(puzzleGoal, puzzle); }