From 2dc3fb3d6e5cb084c1a2af8162f2b0dd91b0c71f Mon Sep 17 00:00:00 2001 From: Joachim Date: Fri, 24 Aug 2018 08:06:02 +0200 Subject: [PATCH] added counter --- src/main/kotlin/be/nielandt/CrossSolver.kt | 77 ++++++++++++++++++---- src/main/kotlin/be/nielandt/EdgeModel.kt | 8 ++- 2 files changed, 70 insertions(+), 15 deletions(-) diff --git a/src/main/kotlin/be/nielandt/CrossSolver.kt b/src/main/kotlin/be/nielandt/CrossSolver.kt index b8f9828..5560cb7 100644 --- a/src/main/kotlin/be/nielandt/CrossSolver.kt +++ b/src/main/kotlin/be/nielandt/CrossSolver.kt @@ -12,7 +12,7 @@ enum class Move { fun random(amount: Int): List { val rgen = Random() val result = mutableListOf() - for(i in 0 until amount) { + for (i in 0 until amount) { result.add(Move.values()[rgen.nextInt(Move.values().size)]) } return result @@ -36,22 +36,71 @@ fun l(colorIndex: Short): String { } fun main(args: Array) { - val edgeModel = EdgeModel() - println(edgeModel) - println("edgeModel.whiteCrossSolved() = ${edgeModel.whiteCrossSolved()}") +// val edgeModel = EdgeModel() +// println(edgeModel) +// println("edgeModel.whiteCrossSolved() = ${edgeModel.whiteCrossSolved()}") +// +// val doMove = edgeModel.doMove(Move.D) +// println(doMove) +// println("doMove.whiteCrossSolved() = ${doMove.whiteCrossSolved()}") +// +// val message = EdgeModel().doMoves(Move.R, Move.U, Move.R_) +// println(message) +// println("message.whiteCrossSolved() = ${message.whiteCrossSolved()}") +// +// val doMoves = EdgeModel().doMoves(Move.random(15)) +// println("random 15 moves = ${doMoves}") +// println("doMoves.whiteCrossSolved() = ${doMoves.whiteCrossSolved()}") - val doMove = edgeModel.doMove(Move.D) - println(doMove) - println("doMove.whiteCrossSolved() = ${doMove.whiteCrossSolved()}") - val message = EdgeModel().doMoves(Move.R, Move.U, Move.R_) - println(message) - println("message.whiteCrossSolved() = ${message.whiteCrossSolved()}") +// val begin = Instant.now() +// var i: Long = 0 +// while (Duration.between(begin, Instant.now()) < Duration.ofMinutes(1)) { +// EdgeModel().doMoves(Move.random(15)) +// i++ +// } +// println("i = ${i}") - val doMoves = EdgeModel().doMoves(Move.random(15)) - println("random 15 moves = ${doMoves}") - println("doMoves.whiteCrossSolved() = ${doMoves.whiteCrossSolved()}") - + val counter = Counter(4, 3) + while (counter.increase()) { + println("counter = ${counter}") + } + + + // make a beginning model, then start doing crazy shit + val beginModel = EdgeModel(10) + +} + +/** + * Counter for X digits of a given base. + */ +class Counter(size: Int, val base: Int = 10) { + + // start the counter at [0,0,...0] + private var counter: Array = Array(size) { 0 } + + fun increase(): Boolean { + if (atMax()) { + return false + } + for (i in this.counter.size - 1 downTo 0) { + this.counter[i]++ + if (this.counter[i] == base) + this.counter[i] = 0 + else + break + } + return true + } + + override fun toString(): String = this.counter.joinToString(".") + + fun atMax(): Boolean { + return counter.all { + it == this.base - 1 + } + } } const val GO = 3 diff --git a/src/main/kotlin/be/nielandt/EdgeModel.kt b/src/main/kotlin/be/nielandt/EdgeModel.kt index 3417432..51390e5 100644 --- a/src/main/kotlin/be/nielandt/EdgeModel.kt +++ b/src/main/kotlin/be/nielandt/EdgeModel.kt @@ -37,7 +37,7 @@ class EdgeModel { constructor() { // do a sanity check val entries = mutableListOf(F, B, L, U, D, R).flatMap { it.asList() }.groupBy { it }.entries - println("entries = ${entries}") +// println("entries = ${entries}") if (entries.any { it.value.size != 2 }) { @@ -53,6 +53,12 @@ class EdgeModel { YELLOW, YELLOW, YELLOW, YELLOW) } + constructor(randomMoves: Int) { + val edgeModel = EdgeModel() + val doMoves = edgeModel.doMoves(Move.random(randomMoves)) + this.model = doMoves.model + } + constructor(model: ShortArray) { this.model = model }