diff --git a/src/TestRon.kt b/src/TestRon.kt new file mode 100644 index 0000000..fbf88bd --- /dev/null +++ b/src/TestRon.kt @@ -0,0 +1,82 @@ +package dev.araozu + +/* + 122334 + 112233 + +*/ + +fun obtSeq(arrl: ArrayList): ArrayList> { + val arrlR = arrayListOf>() + var i = 0 + while (i < arrl.size) { + val primerElem = arrl[i] + if (arrl.contains(primerElem + 1) && arrl.contains(primerElem + 2)) { + arrl.remove(primerElem) + arrl.remove(primerElem + 1) + arrl.remove(primerElem + 2) + arrlR.add(arrayListOf(primerElem, primerElem + 1, primerElem + 2)) + } else { + i++ + } + } + + return arrlR +} + +fun obtTri(arrl: ArrayList): ArrayList> { + val arrlR = arrayListOf>() + var i = 0 + while (i + 2 < arrl.size) { + val primerElem = arrl[i] + if (primerElem == arrl[i + 1] && primerElem == arrl[i + 2]) { + arrl.remove(primerElem) + arrl.remove(primerElem) + arrl.remove(primerElem) + arrlR.add(arrayListOf(primerElem, primerElem, primerElem)) + } else { + i++ + } + } + return arrlR +} + +fun obtPar(arrl: ArrayList): ArrayList> { + val arrlR = arrayListOf>() + var i = 0 + while (i + 1 < arrl.size) { + val primerElem = arrl[i] + if (primerElem == arrl[i + 1]) { + arrl.remove(primerElem) + arrl.remove(primerElem) + arrlR.add(arrayListOf(primerElem, primerElem)) + } else { + i++ + } + } + return arrlR +} + +// TODO: Para solucionar el problema verificar tambien al reves +fun main() { + val cartas = arrayListOf(1, 2, 2, 2, 3, 3, 4, 5) + val cartas2 = arrayListOf(1, 2, 2, 2, 3, 3, 4, 5) + + val arrlR = obtSeq(cartas) + val arrlT = obtTri(cartas) + val arrlP = obtPar(cartas) + + println(arrlR) + println(arrlT) + println(arrlP) + + println("-------------------") + + val arrlP2 = obtPar(cartas2) + val arrlT2 = obtTri(cartas2) + val arrlR2 = obtSeq(cartas2) + + println(arrlR2) + println(arrlT2) + println(arrlP2) +} diff --git a/src/juego/Carta.kt b/src/juego/Carta.kt index 5f5f40f..7d473c1 100644 --- a/src/juego/Carta.kt +++ b/src/juego/Carta.kt @@ -18,13 +18,38 @@ sealed class Carta(val valor: Int) { } } } - } } sealed class CartaNumero(valor: Int, val numero: Int = (valor shl 27) ushr 28) : Carta(valor) { companion object { + fun separarCartasRojo(valores: ArrayList): Pair, ArrayList> { + val arrl = arrayListOf() + val arrlInt = arrayListOf() + + valores.forEach { + val carta = obtenerCartaEspecifica(it) + if (carta is CartaNumeroRojo) arrl.add(carta) + else arrlInt.add(it) + } + + return Pair(arrl, arrlInt) + } + + fun separarCartasNegro(valores: ArrayList): Pair, ArrayList> { + val arrl = arrayListOf() + val arrlInt = arrayListOf() + + valores.forEach { + val carta = obtenerCartaEspecifica(it) + if (carta is CartaNumeroNegro) arrl.add(carta) + else arrlInt.add(it) + } + + return Pair(arrl, arrlInt) + } + fun filtrarCartasRojo(valores: ArrayList): ArrayList { val arrl = arrayListOf() diff --git a/src/juego/Oportunidad.kt b/src/juego/Oportunidad.kt index c72b4ef..8bb5589 100644 --- a/src/juego/Oportunidad.kt +++ b/src/juego/Oportunidad.kt @@ -1,7 +1,6 @@ package dev.araozu.juego interface Oportunidad { - val cartaDescartada: Int val nombreOportunidad: String } diff --git a/src/juego/OportunidadTri.kt b/src/juego/OportunidadTri.kt index 5b2f130..e484ad7 100644 --- a/src/juego/OportunidadTri.kt +++ b/src/juego/OportunidadTri.kt @@ -5,4 +5,27 @@ data class OportunidadTri(override val cartaDescartada: Int) : override val nombreOportunidad: String = "Tri" + companion object { + + private fun arrlCartasContieneTri(carta: Int, arrl: ArrayList): Boolean { + var numCartasEncontradas = 0 + // Elimina el Ășltimo bit para que no se distinga entre cartas de corazon/trebol/etc + val valorCarta = (carta ushr 1) shl 1 + for (c in arrl) { + val valorCartaN = (c ushr 1) shl 1 + if (valorCarta == valorCartaN) numCartasEncontradas++ + if (numCartasEncontradas == 2) return true + } + return false + } + + fun verificar(valorCarta: Int, cartasMano: ArrayList): OportunidadTri? = + if (arrlCartasContieneTri(valorCarta, cartasMano)) { + OportunidadTri(valorCarta) + } else { + null + } + + } + } diff --git a/src/juego/OportunidadWin.kt b/src/juego/OportunidadWin.kt new file mode 100644 index 0000000..4c135df --- /dev/null +++ b/src/juego/OportunidadWin.kt @@ -0,0 +1,28 @@ +package dev.araozu.juego + +class OportunidadWin(override val cartaDescartada: Int) : Oportunidad { + + override val nombreOportunidad = "Win" + + companion object { + + private fun obtSeq1(arrl: ArrayList): ArrayList> { + TODO() + } + + // TODO + fun verificar(valorCarta: Int, cartasMano: ArrayList, numGruposAbiertos: Int = 0) { + val narrl = arrayListOf() + narrl.addAll(cartasMano) + narrl.add(valorCarta) + + val (cartasRojo, cartasRestantes1) = CartaNumero.separarCartasRojo(narrl) + val (cartasNegro, cartasRestantes2) = CartaNumero.separarCartasNegro(cartasRestantes1) + val restoCartas = cartasRestantes2.map { Carta.obtenerCartaEspecifica(it) } + + + } + + } + +} \ No newline at end of file