Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement