Modified random moves generator
This commit is contained in:
parent
5c9dbc991f
commit
184194d21e
@ -35,34 +35,25 @@ open abstract class CrossSolver {
|
|||||||
* - new version, optimised now avoid recalc: 47s, 21s, 34s, 14s, (401592291, 147023415, 67382002, 67381995)
|
* - new version, optimised now avoid recalc: 47s, 21s, 34s, 14s, (401592291, 147023415, 67382002, 67381995)
|
||||||
*/
|
*/
|
||||||
fun main(args: Array<String>) {
|
fun main(args: Array<String>) {
|
||||||
|
/**
|
||||||
|
* choose your moves, fixed or random?
|
||||||
|
*/
|
||||||
|
// val moves = parseMoves("U2 F2 U2 D R2 F2 R2 B2 U' D2 L B L2 U2 L B' U L R B".replace('\'', '_'))
|
||||||
|
val moves = randomMoves(10)
|
||||||
|
|
||||||
// do a fixed scramble for testing purposes
|
|
||||||
// noskip Move.enum 30s, skip Move.enum 32s
|
|
||||||
// val fixedMoves = parseMoves("L_, D, U, L2, F, D, B, D, U2, D, B_, F2, D2, U_, R, D2, R_, L, B_, R")
|
|
||||||
val moveString: String = "U2 F2 U2 D R2 F2 R2 B2 U' D2 L B L2 U2 L B' U L R B".replace('\'', '_')
|
|
||||||
val s = "L_, D, U, L2, F, D, B, D, U2, D, B_, F2, D2, U_, R, D2, R_, L, B_, R"
|
|
||||||
|
|
||||||
val fixedMoves = parseMoves(moveString)
|
|
||||||
println("fixedMoves = ${fixedMoves}")
|
|
||||||
// scramble random
|
|
||||||
val randomMoves = randomMoves(20)
|
|
||||||
|
|
||||||
val moves = fixedMoves
|
|
||||||
println("Scramble: ${moves.map { decodeMove(it) }}")
|
println("Scramble: ${moves.map { decodeMove(it) }}")
|
||||||
|
|
||||||
|
|
||||||
val usedModel = EdgeModel.withMoves(moves)
|
val usedModel = EdgeModel.withMoves(moves)
|
||||||
println(usedModel)
|
println(usedModel)
|
||||||
|
|
||||||
|
// val upgradedSolve = CrossSolverUpgraded().solveCrossesTimed(usedModel)
|
||||||
val upgradedSolve = CrossSolverUpgraded().solveCrossesTimed(usedModel)
|
// CrossSolver.printResults(upgradedSolve)
|
||||||
CrossSolver.printResults(upgradedSolve)
|
//
|
||||||
|
// val upgradedSolveSkip = CrossSolverUpgradedSkip().solveCrossesTimed(usedModel)
|
||||||
val upgradedSolveSkip = CrossSolverUpgradedSkip().solveCrossesTimed(usedModel)
|
// CrossSolver.printResults(upgradedSolveSkip)
|
||||||
CrossSolver.printResults(upgradedSolveSkip)
|
//
|
||||||
|
// val solveCrossesTimed = CrossSolverIterator().solveCrossesTimed(usedModel)
|
||||||
val solveCrossesTimed = CrossSolverIterator().solveCrossesTimed(usedModel)
|
// CrossSolver.printResults(solveCrossesTimed)
|
||||||
CrossSolver.printResults(solveCrossesTimed)
|
|
||||||
|
|
||||||
val s3 = CrossSolverIteratorUpgraded().solveCrossesTimed(usedModel)
|
val s3 = CrossSolverIteratorUpgraded().solveCrossesTimed(usedModel)
|
||||||
CrossSolver.printResults(s3)
|
CrossSolver.printResults(s3)
|
||||||
|
|||||||
@ -91,10 +91,46 @@ fun parseMove(s: String): Int {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a proper scramble set of moves. Disallow the obvious symmetries.
|
||||||
|
*/
|
||||||
fun randomMoves(amount: Int): IntArray {
|
fun randomMoves(amount: Int): IntArray {
|
||||||
val rgen = Random()
|
val rgen = Random()
|
||||||
return IntArray(amount) {
|
val result = IntArray(amount)
|
||||||
rgen.nextInt(18)
|
for (i in 0 until result.size) {
|
||||||
|
// create valid options for the next one
|
||||||
|
val options = mutableListOf<Int>()
|
||||||
|
if (i == 0) {
|
||||||
|
// all options
|
||||||
|
options.addAll(0..17)
|
||||||
}
|
}
|
||||||
|
// if there's two before us, we can't add a third of the same class
|
||||||
|
else if (i > 1 && classOf(result[i - 1]) == classOf(result[i - 2])) {
|
||||||
|
options.addAll(
|
||||||
|
(0..17).filter { classOf(it) != classOf(result[i - 1]) }
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
// all options except the previous one
|
||||||
|
// also disallow same-face solutions
|
||||||
|
options.addAll(
|
||||||
|
(0..17)
|
||||||
|
// can't be the same face move
|
||||||
|
.filter {
|
||||||
|
it % 6 != result[i - 1] % 6
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
result[i] = options[rgen.nextInt(options.size)]
|
||||||
|
}
|
||||||
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun main(args: Array<String>) {
|
||||||
|
printMoves(randomMoves(50))
|
||||||
|
}
|
||||||
|
|
||||||
|
fun printMoves(moves: IntArray) {
|
||||||
|
println(moves.map { decodeMove(it) }.joinToString(","))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user