Agregado codigo para verificar oportunidad tri

master
Araozu 2020-10-16 13:49:29 -05:00
parent ef9c06730a
commit 06a2319d5e
5 changed files with 159 additions and 2 deletions

82
src/TestRon.kt Normal file
View File

@ -0,0 +1,82 @@
package dev.araozu
/*
122334
112233
*/
fun obtSeq(arrl: ArrayList<Int>): ArrayList<ArrayList<Int>> {
val arrlR = arrayListOf<ArrayList<Int>>()
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<Int>): ArrayList<ArrayList<Int>> {
val arrlR = arrayListOf<ArrayList<Int>>()
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<Int>): ArrayList<ArrayList<Int>> {
val arrlR = arrayListOf<ArrayList<Int>>()
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)
}

View File

@ -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<Int>): Pair<ArrayList<CartaNumeroRojo>, ArrayList<Int>> {
val arrl = arrayListOf<CartaNumeroRojo>()
val arrlInt = arrayListOf<Int>()
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<Int>): Pair<ArrayList<CartaNumeroNegro>, ArrayList<Int>> {
val arrl = arrayListOf<CartaNumeroNegro>()
val arrlInt = arrayListOf<Int>()
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<Int>): ArrayList<CartaNumeroRojo> {
val arrl = arrayListOf<CartaNumeroRojo>()

View File

@ -1,7 +1,6 @@
package dev.araozu.juego
interface Oportunidad {
val cartaDescartada: Int
val nombreOportunidad: String
}

View File

@ -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<Int>): 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<Int>): OportunidadTri? =
if (arrlCartasContieneTri(valorCarta, cartasMano)) {
OportunidadTri(valorCarta)
} else {
null
}
}
}

View File

@ -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<CartaNumero>): ArrayList<ArrayList<CartaNumero>> {
TODO()
}
// TODO
fun verificar(valorCarta: Int, cartasMano: ArrayList<Int>, numGruposAbiertos: Int = 0) {
val narrl = arrayListOf<Int>()
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) }
}
}
}