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
}
Comments
0 B
|👍
/👎
0 B
|👍
/👎