Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // This is part of an assignment to solve a puzzle similar to Futoshiki, it is called neighbors
- // and an explanation of the game can be found at https://www.brainbashers.com/neighbourshelp.asp
- /* Puzzle.object */
- object Puzzle {
- // The puzzle object retrieves the size directly from the puzzle it is currently
- // set to parse. The size of the board can change between puzzles and this becomes
- // an issue when trying to write unit tests for the solver.
- private val lines = Utilities.getInput("src/puzzles/puzzle")
- val puzzle:List[String] = lines.slice(2, lines.length)
- val normalized_puzzle:List[String] = Utilities.getNormalizedPuzzle(puzzle)
- val size:Int = Utilities.getSize(lines.slice(1, 2)(0))
- def getPuzzle: List[String] = { puzzle }
- }
- /* Square.scala */
- // The square uses the Puzzle.size property to create the correct default values
- class Square(val x:Int, val y:Int,
- val values:List[Int] = (1 to Puzzle.size).toList,
- val neighbors:List[Direction] = List[Direction](),
- val solved:Boolean = false)
- {
- // This method uses the Puzzle.size to filter out incorrect neighbor values
- def getPossibleValuesForNeighbors:List[Int] = {
- val neighbor_values_lists = for(value <- values) yield List(value + 1, value - 1)
- neighbor_values_lists
- .flatten
- .distinct
- .filter((value) => value > 0 && value <= Puzzle.size)
- .sortWith(_ < _)
- }
- /* SquareTest */
- // This test would fail if the currently parsed board is 2x2 as 4 is not a valid neighbor
- // I think being able to pass a specific puzzle to my test class would solve the issue
- // but I'm not sure how I would do that and if it's the correct approach.
- test("it is possible to get all possible neighbor values from a square") {
- val square_values = List(1, 3)
- val square_with_values = new Square(1, 1, values = square_values)
- val neighbor_values = square_with_values.getPossibleValuesForNeighbors
- assert(neighbor_values === List(2, 4))
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement