diff --git a/Poker/.idea/workspace.xml b/Poker/.idea/workspace.xml index e67dd85..b7e2245 100644 --- a/Poker/.idea/workspace.xml +++ b/Poker/.idea/workspace.xml @@ -3,6 +3,8 @@ + + - + + + + + + + + + @@ -120,7 +150,21 @@ @@ -128,61 +172,62 @@ - - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + diff --git a/Poker/out/production/Poker/Carta.class b/Poker/out/production/Poker/Carta.class index c437497..b5d9597 100644 Binary files a/Poker/out/production/Poker/Carta.class and b/Poker/out/production/Poker/Carta.class differ diff --git a/Poker/out/production/Poker/PokerKt.class b/Poker/out/production/Poker/PokerKt.class deleted file mode 100644 index 4015d2a..0000000 Binary files a/Poker/out/production/Poker/PokerKt.class and /dev/null differ diff --git a/Poker/src/Poker.kt b/Poker/src/Poker.kt index 475187a..e704191 100644 --- a/Poker/src/Poker.kt +++ b/Poker/src/Poker.kt @@ -1,10 +1,5 @@ - import java.util.* - - -const val CARAS = "23456789tjqka" -const val LETRAS = "shdc" - +import kotlin.collections.ArrayList class Carta(completo: String) { fun valorPalo(): String { @@ -20,175 +15,380 @@ class Carta(completo: String) { } } -class OrdenarCartas { - val valores = charArrayOf('A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K') - val palos = charArrayOf('S', 'C', 'H', 'D') - - fun compararValor(valor1: Char, valor2: Char): Int { - var numValor1 = 0 - var numValor2 = 0 - for (i in valores.indices) { - if (valor1 == valores[i]) { - numValor1 = i - break - } - } +fun ganadores(jugadas: MutableList>): String { - for (i in valores.indices) { - if (valor2 == valores[i]) { - numValor2 = i - break + print("Cantidad de jugadas ${jugadas.size}") + val ganadores: ArrayList> = ArrayList>() + var prim = true + val indices = ArrayList() + var index = 0 + for (mano in jugadas) { + if (prim) { + ganadores.add(mano) + indices.add(index) + prim = false + } else { + val resultadoMayor = mostrarResultado(ganadores[ganadores.size]) + val mostrarResultadoActual = mostrarResultado(mano) + if (resultadoMayor[0] < mostrarResultadoActual[0]) { + ganadores.clear() + indices.clear() + indices.add(index) + ganadores.add(mano) + } } + index++ } - return if (numValor1 == numValor2) { - 0 - } else if (numValor1 > numValor2) { - 1 - } else { - -1 + var stringGanadores = "" + for (i in indices.indices) { + stringGanadores += " " + indices[i] } + return stringGanadores } - fun esAnterior(carta1: Carta, carta2: Carta): Boolean { - var valor1 = 0 - var valor2 = 0 - for (i in valores.indices) { - if (carta1.valorPalo()[0] == valores[i]) { - valor1 = i - break +fun mostrarResultado(mano: Array): ArrayList { + val mostrarResultado = ArrayList() + val valores = IntArray(13) + val palos = IntArray(4) + ArrayNuevo(valores, palos, mano) + + if (esEscaleraColor(valores, palos)) { + val ordenado = ordenarCartas(mano) + mostrarResultado.add(9) + + if (ordenado[4] == 12 && ordenado[0] == 0) { + mostrarResultado.add(14) + } else { + mostrarResultado.add(ordenado[4]) } - } + } else if (esPoker(valores)) { + + mostrarResultado.add(8) + if (indiceDe(4, valores) == 0) { + mostrarResultado.add(14) + mostrarResultado.add(indiceDe(1, valores)) + } else { + mostrarResultado.add(indiceDe(4, valores)) + if (indiceDe(1, valores) == 0) { + mostrarResultado.add(14) + } else { + mostrarResultado.add(indiceDe(1, valores)) + } + } + } else if (esFull(valores)) { + + mostrarResultado.add(7) + if (indiceDe(3, valores) == 0) { + mostrarResultado.add(14) + mostrarResultado.add(indiceDe(2, valores)) + } else { + mostrarResultado.add(indiceDe(3, valores)) + if (indiceDe(2, valores) == 0) { + mostrarResultado.add(14) + } else { + mostrarResultado.add(indiceDe(2, valores)) + } + } + } else if (esColor(palos)) { + var aux = 0 + mostrarResultado.add(6) + val ordenado = ordenarCartas(mano) + if (ordenado[0] == 0) { + mostrarResultado.add(14) + aux = 1 + } + for (i in 4 downTo aux) { + mostrarResultado.add(ordenado[i]) + } + } else if (esEscalera(valores)) { + val ordenado = ordenarCartas(mano) + mostrarResultado.add(5) + if (ordenado[4] == 12 && ordenado[0] == 1) { + mostrarResultado.add(14) + } else { + mostrarResultado.add(ordenado[4]) + } + } else if (esTrio(valores)) { + mostrarResultado.add(4) - for (i in valores.indices) { - if (carta2.valorPalo()[0] == valores[i]) { - valor2 = i - break + if (indiceDe(3, valores) == 0) { + mostrarResultado.add(14) + } else { + mostrarResultado.add(indiceDe(3, valores)) + } + val ordenado = ordenarCartas(mano) + var aux = 0 + if (ordenado[0] == 0) { + mostrarResultado.add(14) + aux = 1 + } + for (i in 4 downTo aux) { + if (mostrarResultado[1] != ordenado[i]) { + mostrarResultado.add(ordenado[i]) + } + } + } else if (esParDoble(valores)) { + mostrarResultado.add(3) + + if (indiceDe(2, valores) == 0) { + mostrarResultado.add(14) + mostrarResultado.add(indiceDeReversa(2, valores)) + } else { + mostrarResultado.add(indiceDeReversa(2, valores)) + mostrarResultado.add(indiceDe(2, valores)) + } + if (indiceDe(1, valores) == 0) { + mostrarResultado.add(14) + } else { + mostrarResultado.add(indiceDe(1, valores)) + } + } else if (esPar(valores)) { + mostrarResultado.add(2) + + if (indiceDe(2, valores) == 0) { + mostrarResultado.add(14) + } else { + mostrarResultado.add(indiceDe(2, valores)) + } + val ordenado = ordenarCartas(mano) + var aux = 0 + if (ordenado[0] == 0) { + mostrarResultado.add(14) + aux = 1 + } + for (i in 4 downTo aux) { + if (mostrarResultado[1] != ordenado[i]) { + mostrarResultado.add(ordenado[i]) + } + } + } else { + var aux = 0 + mostrarResultado.add(1) + + val ordenado = ordenarCartas(mano) + if (ordenado[0] == 0) { + mostrarResultado.add(14) + aux = 1 + } + for (i in 4 downTo aux) { + mostrarResultado.add(ordenado[i]) } } - return if (valor1 != valor2 + 1) { - false - } else true + return mostrarResultado } -} - +fun indiceDe(elemento: Int, vector: IntArray): Int { + for (i in vector.indices) { + if (vector[i] == elemento) return i + } -fun ganador(jugadas: MutableList>): String? { - //Imprime la cantidad de jugadas - println("Cantidad de jugadas: " + jugadas.size) + return -1 +} - val manos = IntArray(jugadas.size) - var mejor = 8 - for (indice1 in manos.indices) { - if (manos[indice1] < mejor) { - mejor = manos[indice1] - } +fun indiceDeReversa(elemento: Int, vector: IntArray): Int { + for (i in vector.indices.reversed()) { + if (vector[i] == elemento) return i } - val mejoresManos = ArrayList() - for (indice1 in manos.indices) { - if (mejor == manos[indice1]) { - mejoresManos.add(indice1) + return -1 +} + +fun ordenarCartas(mano: Array): IntArray { + val ordenado = IntArray(5) + for (i in 0..4) { + val valorString: String = mano[i].valor + if (valorString == "A" || valorString == "a") { + ordenado[i] = 0 + } else if (valorString == "T" || valorString == "t") { + ordenado[i] = 9 + } else if (valorString == "J" || valorString == "j") { + ordenado[i] = 10 + } else if (valorString == "Q" || valorString == "q") { + ordenado[i] = 11 + } else if (valorString == "K" || valorString == "k") { + ordenado[i] = 12 + } else { + ordenado[i] = valorString.toInt() - 1 + } } + Arrays.sort(ordenado) + return ordenado } - if (mejoresManos.size == 1) { - return "Jugada " + (mejoresManos[0] + 1) +fun esEscaleraColor(valores: IntArray, palos: IntArray): Boolean { - } - //agregar para retomar el ganador en caso de verificar la Carta + var sum = false - return "Error" -} + var sumador = 0 -var mejor = 0 + for (i in 1..12) { -fun verificarCarta(): Array? { - var respuesta: ArrayList?>? = null + if (valores[i] > 1) { + return false + } + if (valores[i] == 1) { + sum = true + } + if (valores[i] == 0 && sum) { + break + } + if (sum) { + sumador++ + } + } - if (mejor === 1) { - respuesta = siEsPoker() - } else if (mejor === 2) { - respuesta = siEsFull() - } else if (mejor === 3) { - respuesta = siEsColorYCartaAlta() - } else if (mejor === 4) { - respuesta = siEscalera() - } else if (mejor === 5) { - respuesta = siTrio() - } else if (mejor === 6) { - respuesta = siParDoble() - } else if (mejor === 7) { - respuesta = siPar() + if (sumador == 5 || sumador == 4 && valores[0] == 1 && valores[9] == 1 && valores[8] == 0) { + for (i in 0..3) { + if (palos[i] == 5) { + return true + } + } + } + return false } - return respuesta!![0] -} +fun esPoker(valores: IntArray): Boolean { + val ordenado = valores.clone() + Arrays.sort(ordenado) + return if (ordenado[12] == 4) { + true + } else false + } -fun siPar(): ArrayList?>? { -//completar +fun esFull(valores: IntArray): Boolean { + val ordenado = valores.clone() + Arrays.sort(ordenado) + return if (ordenado[12] == 3 && ordenado[11] == 2) true else false + } -} +fun esColor(palos: IntArray): Boolean { + val ordenado = palos.clone() + Arrays.sort(ordenado) + return if (ordenado[3] == 5) true else false + } -fun siParDoble(): ArrayList?>? { +fun esEscalera(valores: IntArray): Boolean { -} + var sum = false -fun siEscalera(): ArrayList?>? { + var sumador = 0 + for (i in 1..12) { -} + if (valores[i] > 1) { + return false + } + if (valores[i] == 1) { + sum = true + } + if (valores[i] == 0 && sum) { + break + } + if (sum) { + sumador++ + } + } + return if (sumador == 5 || sumador == 4 && valores[0] == 1 && valores[9] == 1 && valores[8] == 0) { + true + } else false + } -fun siTrio(): ArrayList?>? { +fun esTrio(valores: IntArray): Boolean { + val ordenado = valores.clone() + + Arrays.sort(ordenado) + return if (ordenado[12] == 3 && ordenado[11] == 1 && ordenado[10] == 1) true else false + } -} +fun esParDoble(valores: IntArray): Boolean { -fun siEsColorYCartaAlta(): ArrayList?>? { + val ordenado = valores.clone() -} + Arrays.sort(ordenado) + return if (ordenado[12] == 2 && ordenado[11] == 2 && ordenado[10] == 1) true else false + } -fun siEsFull(): ArrayList?>? { +fun esPar(valores: IntArray): Boolean { + val ordenado = valores.clone() + + Arrays.sort(ordenado) + return if (ordenado[12] == 2 && ordenado[11] == 1 && ordenado[10] == 1 && ordenado[9] == 1) true else false + } -} +fun mostrarGanador(ganadores: ArrayList>) { + + for (i in ganadores.indices) { + for (j in 0..4) { + print(ganadores[i][j].valorPalo()) + } + println() + } + } -fun siEsPoker(): ArrayList?>? { -} +fun ArrayNuevo(valores: IntArray, palos: IntArray, mano: Array) { + for (i in 0..12) { + valores[i] = 0 + } + for (i in 0..3) { + palos[i] = 0 + } + + for (i in 0..4) { + val valorString: String = mano[i]!!.valor + val paloString: String = mano[i].palo + if (valorString == "A" || valorString == "a") { + valores[0]++ + } else if (valorString == "T" || valorString == "t") { + valores[9]++ + } else if (valorString == "J" || valorString == "j") { + valores[10]++ + } else if (valorString == "Q" || valorString == "q") { + valores[11]++ + } else if (valorString == "K" || valorString == "k") { + valores[12]++ + } else if (valorString == "J" || valorString == "j") { + valores[10]++ + } else { + val index = valorString.toInt() + valores[index - 1]++ + } + + if (paloString == "S" || paloString == "s") { + palos[0]++ + } else if (paloString == "C" || paloString == "c") { + palos[1]++ + } else if (paloString == "H" || paloString == "h") { + palos[2]++ + } else if (paloString == "D" || paloString == "d") { + palos[3]++ + } + } + } fun main(args: Array) { - /*val manos = arrayOf( - "ah ad th tc 6s", - "as 2s 3s 4s 5s" - ) - for (mano in manos) { - println("Jugada: ${jugada(mano)}") - }*/ - - val jugadas: MutableList> = ArrayList() - - val jugada1 = arrayOfNulls(5) - jugada1[0] = Carta("AH") - jugada1[1] = Carta("AD") - jugada1[2] = Carta("TH") - jugada1[3] = Carta("TC") - jugada1[4] = Carta("6S") - val jugada2 = arrayOfNulls(5) - jugada2[0] = Carta("AH") - jugada2[1] = Carta("KD") - jugada2[2] = Carta("QH") - jugada2[3] = Carta("3C") - jugada2[4] = Carta("3S") - - - jugadas.add(jugada1) - jugadas.add(jugada2) - - // val ganadores: String = mc.ganadores(jugadas) - println("Jugada: ${ganador(jugadas)}") -} - + val jugadas: MutableList> = + ArrayList>() + val m1: Array = arrayOfNulls(5) + m1[0] = Carta("AH") + m1[1] = Carta("AD") + m1[2] = Carta("5D") + m1[3] = Carta("5D") + m1[4] = Carta("2D") + val m2: Array = arrayOfNulls(5) + m2[0] = Carta("5H") + m2[1] = Carta("5D") + m2[2] = Carta("2D") + m2[3] = Carta("2D") + m2[4] = Carta("AD") + jugadas.add(m1) + jugadas.add(m2) + val ganadores = ganadores(jugadas) + + println("Ganadores = $ganadores") +}