var board = Utilities.createBoard(Puzzle.puzzle) var history = Tuple[Board, Square, Int]() var rules = List[() => Board](resolveNeighbors, resolveSequence, resolveUniqueValues, resolveNonNeighbors, ) for(_ <- 0 until 100) { rules.foreach((rule) => { // Higher order function som tar inn boardet og en funksjon som definerer "current" regel board = board.solve(board, rule) if(!Utilities.verifyBoard(board)) { // Se definition under på hva denne gjør board = Utilities.rollback(history) } // Kun velg en "tilfeldig" verdi dersom reglene ikke kom frem til noe nytt if(!board.hasChanged) { // Returnerer en tuple med current board, squaren vi har endret og verdien vi valgte history = Utilities.bruteforce(board) // Lag en ny square med tallet bruteforceren valgte som solution val altered = history.get(1).setSolution(history.get(2)) // Erstatt squaren i det gamle brettet med den nye board = board.replaceSquare(altered) } }) } if(!board.solved) { println("We were unable to solve the board in 500 attempts. Exiting after displaying current progress") board.prettyPrint() else { board.prettyPrint() } // UTILITIES.scala def rollback(history:Tuple[Board, Square, Int]):Board = { val altered = square.removeSolution(history.get(2)) // Fjerner løsningen som ikke fungerte som en mulighet val temp_board = board.replaceSquare(altered) // Erstatter squaren som fikk fjernet en verdi temp_board // Returnerer det nye brettet }