Advertisement
Moortiii

Bruteforcer

Sep 11th, 2019
328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.62 KB | None | 0 0
  1. var board = Utilities.createBoard(Puzzle.puzzle)
  2. var history = Tuple[Board, Square, Int]()  
  3.  
  4. var rules = List[() => Board](resolveNeighbors,
  5.                               resolveSequence,
  6.                               resolveUniqueValues,
  7.                               resolveNonNeighbors,
  8.                              )
  9.  
  10. for(_ <- 0 until 100) {
  11.     rules.foreach((rule) => {
  12.         // Higher order function som tar inn boardet og en funksjon som definerer "current" regel  
  13.         board = board.solve(board, rule)
  14.        
  15.         if(!Utilities.verifyBoard(board)) {
  16.             // Se definition under på hva denne gjør
  17.             board = Utilities.rollback(history)
  18.         }
  19.  
  20.         // Kun velg en "tilfeldig" verdi dersom reglene ikke kom frem til noe nytt
  21.         if(!board.hasChanged) {
  22.             // Returnerer en tuple med current board, squaren vi har endret og verdien vi valgte
  23.             history = Utilities.bruteforce(board)
  24.            
  25.             // Lag en ny square med tallet bruteforceren valgte som solution
  26.             val altered = history.get(1).setSolution(history.get(2))
  27.            
  28.             // Erstatt squaren i det gamle brettet med den nye
  29.             board = board.replaceSquare(altered)
  30.         }  
  31.     })
  32. }
  33.  
  34. if(!board.solved) {
  35.     println("We were unable to solve the board in 500 attempts. Exiting after displaying current progress")
  36.     board.prettyPrint()
  37. else {
  38.     board.prettyPrint()
  39. }
  40.  
  41. // UTILITIES.scala
  42. def rollback(history:Tuple[Board, Square, Int]):Board = {
  43.     val altered = square.removeSolution(history.get(2)) // Fjerner løsningen som ikke fungerte som en mulighet
  44.     val temp_board = board.replaceSquare(altered) // Erstatter squaren som fikk fjernet en verdi
  45.  
  46.     temp_board // Returnerer det nye brettet
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement