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 @@
+
+
@@ -38,7 +40,7 @@
-
+
@@ -53,6 +55,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -66,9 +81,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -120,7 +150,21 @@
1587433850431
-
+
+ 1587434443625
+
+
+
+ 1587434443625
+
+
+ 1587434573538
+
+
+
+ 1587434573539
+
+
@@ -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")
+}