Moortiii icon

Bruteforcer

Moortiii | PRO | 09/11/19 12:23:39 PM UTC | 0 ⭐ | 7035 👁️ | Never ⏰ | []
Scala |

1.62 KB

|

None

|

0 👍

/

0 👎

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

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎