bb4 / bb4-puzzles

A Scala puzzle framework with generator and solver implementations for puzzles like Sudoku, Hi-Q, OneTough Puzzle, Tantrix, and others.
MIT License
2 stars 2 forks source link

sliding puzzle exception for brute force sequential solver #25

Open barrybecker4 opened 7 years ago

barrybecker4 commented 7 years ago

The problem seems to only be reproducible when run through webstart. The stack trace is:

WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5. Exception in thread "Worker Thread" java.lang.StackOverflowError at scala.collection.immutable.VectorPointer.initFrom$(Vector.scala:690) at scala.collection.immutable.VectorIterator.initFrom(Vector.scala:586) at scala.collection.immutable.VectorPointer.initFrom(Vector.scala:688) at scala.collection.immutable.VectorPointer.initFrom$(Vector.scala:688) at scala.collection.immutable.VectorIterator.initFrom(Vector.scala:586) at scala.collection.immutable.Vector.initIterator(Vector.scala:87) at scala.collection.immutable.Vector.iterator(Vector.scala:94) at scala.collection.immutable.Vector.iterator(Vector.scala:64) at scala.collection.IterableLike.foreach(IterableLike.scala:71) at scala.collection.IterableLike.foreach$(IterableLike.scala:70) at scala.collection.AbstractIterable.foreach(Iterable.scala:54) at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:788) at com.barrybecker4.puzzle.slidingpuzzle.model.SliderBoard.$anonfun$calculateManhattan$1(SliderBoard.scala:95) at scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:156) at com.barrybecker4.puzzle.slidingpuzzle.model.SliderBoard.calculateManhattan(SliderBoard.scala:94) at com.barrybecker4.puzzle.slidingpuzzle.model.SliderBoard.(SliderBoard.scala:42) at com.barrybecker4.puzzle.slidingpuzzle.model.SliderBoard.(SliderBoard.scala:57) at com.barrybecker4.puzzle.slidingpuzzle.model.SliderBoard.(SliderBoard.scala:68) at com.barrybecker4.puzzle.slidingpuzzle.model.SliderBoard.doMove(SliderBoard.scala:160) at com.barrybecker4.puzzle.slidingpuzzle.SlidingPuzzleController.transition(SlidingPuzzleController.scala:41) at com.barrybecker4.puzzle.slidingpuzzle.SlidingPuzzleController.transition(SlidingPuzzleController.scala:23) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.$anonfun$search$1(SequentialPuzzleSolver.scala:54) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.$anonfun$search$1$adapted(SequentialPuzzleSolver.scala:53) at scala.collection.mutable.ArraySeq.foreach(ArraySeq.scala:74) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.search(SequentialPuzzleSolver.scala:53) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.$anonfun$search$1(SequentialPuzzleSolver.scala:58) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.$anonfun$search$1$adapted(SequentialPuzzleSolver.scala:53) at scala.collection.mutable.ArraySeq.foreach(ArraySeq.scala:74) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.search(SequentialPuzzleSolver.scala:53) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.$anonfun$search$1(SequentialPuzzleSolver.scala:58) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.$anonfun$search$1$adapted(SequentialPuzzleSolver.scala:53) at scala.collection.mutable.ArraySeq.foreach(ArraySeq.scala:74) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.search(SequentialPuzzleSolver.scala:53) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.$anonfun$search$1(SequentialPuzzleSolver.scala:58) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.$anonfun$search$1$adapted(SequentialPuzzleSolver.scala:53) at scala.collection.mutable.ArraySeq.foreach(ArraySeq.scala:74) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.search(SequentialPuzzleSolver.scala:53) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.$anonfun$search$1(SequentialPuzzleSolver.scala:58) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.$anonfun$search$1$adapted(SequentialPuzzleSolver.scala:53) at scala.collection.mutable.ArraySeq.foreach(ArraySeq.scala:74) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.search(SequentialPuzzleSolver.scala:53) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.$anonfun$search$1(SequentialPuzzleSolver.scala:58) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.$anonfun$search$1$adapted(SequentialPuzzleSolver.scala:53) at scala.collection.mutable.ArraySeq.foreach(ArraySeq.scala:74) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.search(SequentialPuzzleSolver.scala:53) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.$anonfun$search$1(SequentialPuzzleSolver.scala:58)

barrybecker4 commented 7 years ago

Just happened in IDE too using the 15 tile puzzle

Exception in thread "Worker Thread" java.lang.StackOverflowError at scala.Array$.ofDim(Array.scala:220) at com.barrybecker4.puzzle.slidingpuzzle.model.SliderBoard.(SliderBoard.scala:57) at com.barrybecker4.puzzle.slidingpuzzle.model.SliderBoard.(SliderBoard.scala:68) at com.barrybecker4.puzzle.slidingpuzzle.model.SliderBoard.doMove(SliderBoard.scala:160) at com.barrybecker4.puzzle.slidingpuzzle.SlidingPuzzleController.transition(SlidingPuzzleController.scala:41) at com.barrybecker4.puzzle.slidingpuzzle.SlidingPuzzleController.transition(SlidingPuzzleController.scala:23) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.$anonfun$search$1(SequentialPuzzleSolver.scala:54) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.$anonfun$search$1$adapted(SequentialPuzzleSolver.scala:53) at scala.collection.mutable.ArraySeq.foreach(ArraySeq.scala:74) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.search(SequentialPuzzleSolver.scala:53) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.$anonfun$search$1(SequentialPuzzleSolver.scala:58) at com.barrybecker4.puzzle.common.solver.SequentialPuzzleSolver.$anonfun$search$1$adapted(SequentialPuzzleSolver.scala:53)

barrybecker4 commented 7 years ago

I can work around the problem in the IDE by passing a bigger value for -Xss1m like -Xss64m but the main problem is too many recursive calls. Seems like it will be necessary to rewrite without recursion.

barrybecker4 commented 3 years ago

Not using webstart anymore. Increasing Xss is fine for now.