Agregado codigo para verificar oportunidad tri
This commit is contained in:
parent
ef9c06730a
commit
06a2319d5e
82
src/TestRon.kt
Normal file
82
src/TestRon.kt
Normal 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)
|
||||
}
|
@ -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>()
|
||||
|
||||
|
@ -1,7 +1,6 @@
|
||||
package dev.araozu.juego
|
||||
|
||||
interface Oportunidad {
|
||||
|
||||
val cartaDescartada: Int
|
||||
val nombreOportunidad: String
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
28
src/juego/OportunidadWin.kt
Normal file
28
src/juego/OportunidadWin.kt
Normal 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) }
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user