a little bit simplify work with converts/inverts

This commit is contained in:
InsanusMokrassar 2018-09-08 19:03:58 +08:00
parent f571fecb58
commit 091f6a7776

View File

@ -53,10 +53,10 @@ sealed class Operation {
object TwoGrowFour : Operation() { object TwoGrowFour : Operation() {
override fun canConvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean { override fun canConvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean {
return numbers[2] / 2 > changesHistory.count { it == FourGrowTwo } return numbers[2] > 1
} }
override fun canInvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean { override fun canInvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean {
return numbers[4] != zeroAsByte && changesHistory.contains(this) return numbers[4] > 0 && changesHistory.contains(this)
} }
override fun doConvert(numbers: MutableList<Byte>, changesHistory: MutableList<Operation>?) { override fun doConvert(numbers: MutableList<Byte>, changesHistory: MutableList<Operation>?) {
@ -78,7 +78,7 @@ object TwoGrowFour : Operation() {
object FourGrowTwo : Operation() { object FourGrowTwo : Operation() {
override fun canConvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean { override fun canConvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean {
return numbers[4] > changesHistory.count { it == TwoGrowFour } return numbers[4] > 0
} }
override fun canInvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean { override fun canInvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean {
return numbers[2] > 1 && changesHistory.contains(this) return numbers[2] > 1 && changesHistory.contains(this)
@ -95,7 +95,7 @@ object FourGrowTwo : Operation() {
object EightGrowOne : Operation() { object EightGrowOne : Operation() {
override fun canConvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean { override fun canConvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean {
return numbers[8] > changesHistory.count { it == OneGrowEight } return numbers[8] > 0
&& (TwoGrowFour.canConvert(numbers, changesHistory) || FourGrowTwo.canConvert(numbers, changesHistory)) && (TwoGrowFour.canConvert(numbers, changesHistory) || FourGrowTwo.canConvert(numbers, changesHistory))
} }
override fun canInvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean { override fun canInvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean {
@ -128,7 +128,7 @@ object EightGrowOne : Operation() {
object OneGrowEight : Operation() { object OneGrowEight : Operation() {
override fun canConvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean { override fun canConvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean {
return numbers[1] / 2 > changesHistory.count { it == EightGrowOne } return numbers[1] > 1
} }
override fun canInvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean { override fun canInvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean {
return numbers[8] > 0 && changesHistory.contains(this) return numbers[8] > 0 && changesHistory.contains(this)
@ -145,10 +145,12 @@ object OneGrowEight : Operation() {
object SixGrowSeven : Operation() { object SixGrowSeven : Operation() {
override fun canConvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean { override fun canConvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean {
return numbers[6] > changesHistory.count { it == SevenGrowSix } return numbers[6] > 0
} }
override fun canInvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean { override fun canInvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean {
return numbers[7] > if (changesHistory.canGrowSimpleWay) { return numbers[7] > if (
changesHistory.containsSimpleGrows && changesHistory.canGrowSimpleWay
) {
1 1
} else { } else {
0 0
@ -172,7 +174,9 @@ object SixGrowSeven : Operation() {
object SevenGrowSix : Operation() { object SevenGrowSix : Operation() {
override fun canConvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean { override fun canConvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean {
return numbers[7] - changesHistory.count { it == SixGrowSeven } > if (changesHistory.canGrowSimpleWay) { return numbers[7] - changesHistory.count { it == SixGrowSeven } > if (
changesHistory.containsSimpleGrows && changesHistory.canGrowSimpleWay
) {
1 1
} else { } else {
0 0
@ -194,9 +198,7 @@ object SevenGrowSix : Operation() {
object FiveGrowNine : Operation() { object FiveGrowNine : Operation() {
override fun canConvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean { override fun canConvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean {
return changesHistory.canGrowSimpleWay return changesHistory.canGrowSimpleWay
&& ( && (numbers[5] / 2 - (changesHistory.count { it == NineGrowFive })) > changesHistory.count { it == this }
numbers[5] / 2 - (changesHistory.count { it == NineGrowFive })
) > changesHistory.count { it == this }
} }
override fun canInvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean { override fun canInvert(numbers: List<Byte>, changesHistory: List<Operation>): Boolean {