Cleaned up counter classes.
This commit is contained in:
parent
5a2131cb64
commit
e0bd2fb01b
@ -1,5 +1,7 @@
|
||||
package be.nielandt
|
||||
|
||||
import be.nielandt.counter.CounterBasic
|
||||
|
||||
class CrossSolverBase : CrossSolver() {
|
||||
/**
|
||||
* Solve the minimal cross for all colors.
|
||||
@ -10,7 +12,7 @@ class CrossSolverBase : CrossSolver() {
|
||||
for (moveCount in 1..8) {
|
||||
// build a counter of moveCount big
|
||||
println("allCrossMoveCount basic doing $moveCount")
|
||||
val counter = Counter(moveCount, 18)
|
||||
val counter = CounterBasic(moveCount)
|
||||
|
||||
// count up, each state of the counter corresponds to a combination of moves
|
||||
do {
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package be.nielandt
|
||||
|
||||
import be.nielandt.counter.CounterBasic
|
||||
|
||||
/**
|
||||
* This solver avoids redoing edgemodel manipulations. Should be equivalent to X nested for loops.
|
||||
*/
|
||||
@ -10,7 +12,7 @@ class CrossSolverUpgraded : CrossSolver() {
|
||||
for (moveCount in 1..8) {
|
||||
println("all cross move count upgrade doing $moveCount")
|
||||
// build a counter of moveCount big
|
||||
val counter = Counter(moveCount, 18)
|
||||
val counter = CounterBasic(moveCount)
|
||||
val edgeModelFactory = EdgeModelFactory(edgeModel, counter)
|
||||
|
||||
while (edgeModelFactory.hasNext()) {
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package be.nielandt
|
||||
|
||||
import be.nielandt.counter.CounterSkip
|
||||
|
||||
/**
|
||||
* This solver avoids redoing edgemodel manipulations. Should be equivalent to X nested for loops.
|
||||
*/
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package be.nielandt
|
||||
|
||||
import be.nielandt.counter.Counter
|
||||
|
||||
/**
|
||||
* This thing helps us to create edgemodels using a counter. The advantage is that the edgemodel doesn't need to be calculated
|
||||
* completely from scratch: previous states are kept, so if, e.g., the third digit changes in the counter (of length 5),
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
package be.nielandt
|
||||
package be.nielandt.counter
|
||||
|
||||
/**
|
||||
* Counter for X digits of a given base.
|
||||
*/
|
||||
open class Counter(size: Int, val base: Int = 18) {
|
||||
open abstract class Counter(size: Int, val base: Int = 18) {
|
||||
|
||||
/**
|
||||
* Empty counter, all 0 values for each digit.
|
||||
@ -17,26 +17,9 @@ open class Counter(size: Int, val base: Int = 18) {
|
||||
var lastModifiedIndex: Int = 0
|
||||
|
||||
/**
|
||||
* Increase the counter.
|
||||
*
|
||||
* @return true if the increase happened, false if we hit the ceiling.
|
||||
* Increase the counter one step. True if it succeeded and a new value is there, false if we've reached the end.
|
||||
*/
|
||||
open fun increase(): Boolean {
|
||||
if (atMax()) {
|
||||
return false
|
||||
}
|
||||
for (i in this.counter.size - 1 downTo 0) {
|
||||
this.counter[i]++
|
||||
this.lastModifiedIndex = i
|
||||
if (this.counter[i] == base) {
|
||||
this.counter[i] = 0
|
||||
} else {
|
||||
// keep track of the digit index we're breaking on.
|
||||
break
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
abstract fun increase(): Boolean
|
||||
|
||||
/**
|
||||
* How many digits does this counter contain?
|
||||
38
src/main/kotlin/be/nielandt/counter/CounterBasic.kt
Normal file
38
src/main/kotlin/be/nielandt/counter/CounterBasic.kt
Normal file
@ -0,0 +1,38 @@
|
||||
package be.nielandt.counter
|
||||
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
* Counter for X digits of a given base. Skips situations where faces are the same.
|
||||
*/
|
||||
class CounterBasic(size: Int) : Counter(size, 18) {
|
||||
|
||||
/**
|
||||
* Increase the counter.
|
||||
*
|
||||
* @return true if the increase happened, false if we hit the ceiling.
|
||||
*/
|
||||
override fun increase(): Boolean {
|
||||
if (atMax()) {
|
||||
return false
|
||||
}
|
||||
for (i in this.counter.size - 1 downTo 0) {
|
||||
this.counter[i]++
|
||||
this.lastModifiedIndex = i
|
||||
if (this.counter[i] == base) {
|
||||
this.counter[i] = 0
|
||||
} else {
|
||||
// keep track of the digit index we're breaking on.
|
||||
break
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val counterSkip = CounterSkip(4)
|
||||
while (counterSkip.increase()) {
|
||||
println("counterSkip.counter = ${Arrays.toString(counterSkip.counter)}")
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package be.nielandt
|
||||
package be.nielandt.counter
|
||||
|
||||
import java.util.*
|
||||
|
||||
Loading…
Reference in New Issue
Block a user