package Poker02 object paloss { val palos = arrayOf( 'S','D','H','C' ) } data class mazojugado(val valor: Char, val palo: Char) fun mejormazo(jugada1 : List, jugada2 : List, tipo1 :String, tipo2 : String) : String{ var ganador : String = "" var palosusados = arrayOf(0,0,0,0) var valordelmazovv1 = arrayOf(0,0,0,0,0,0,0,0,0,0,0,0,0) for (palos in jugada1){ when(palos.palo){ 'S' -> palosusados[0]++ 'C' -> palosusados[1]++ 'D' -> palosusados[2]++ 'H' -> palosusados[3]++ } } for (valores in jugada1){ when(valores.valor){ 'A' -> valordelmazovv1[0]++ '2' -> valordelmazovv1[1]++ '3' -> valordelmazovv1[2]++ '4' -> valordelmazovv1[3]++ '5' -> valordelmazovv1[4]++ '6' -> valordelmazovv1[5]++ '7' -> valordelmazovv1[6]++ '8' -> valordelmazovv1[7]++ '9' -> valordelmazovv1[8]++ 'T' -> valordelmazovv1[9]++ 'J' -> valordelmazovv1[10]++ 'Q' -> valordelmazovv1[11]++ 'K' -> valordelmazovv1[12]++ } } var palosusados2 = arrayOf(0,0,0,0) var valordelmazo = arrayOf(0,0,0,0,0,0,0,0,0,0,0,0,0) for (palos in jugada2){ when(palos.palo){ 'S' -> palosusados2[0]++ 'C' -> palosusados2[1]++ 'D' -> palosusados2[2]++ 'H' -> palosusados2[3]++ } } for (valores in jugada2){ when(valores.valor){ 'A' -> valordelmazo[0]++ '2' -> valordelmazo[1]++ '3' -> valordelmazo[2]++ '4' -> valordelmazo[3]++ '5' -> valordelmazo[4]++ '6' -> valordelmazo[5]++ '7' -> valordelmazo[6]++ '8' -> valordelmazo[7]++ '9' -> valordelmazo[8]++ 'T' -> valordelmazo[9]++ 'J' -> valordelmazo[10]++ 'Q' -> valordelmazo[11]++ 'K' -> valordelmazo[12]++ } } val jugadas: ArrayList = arrayListOf(0,0,0,0,0,0,0,0,0,0) when(tipo1){ "ESCALERA REAL" -> jugadas[0]++ "ESCALERA COLOR" -> jugadas[1]++ "POKER" -> jugadas[2]++ "FULL HOUSE" -> jugadas[3]++ "COLOR" -> jugadas[4]++ "ESCALERA" -> jugadas[5]++ "TRIO" -> jugadas[6]++ "DOBLE PAREJA" -> jugadas[7]++ "PAREJA" -> jugadas[8]++ "CARTA ALTA" -> jugadas[9]++ } when(tipo2){ "ESCALERA REAL" -> jugadas[0]++ "ESCALERA COLOR" -> jugadas[1]++ "POKER" -> jugadas[2]++ "FULL HOUSE" -> jugadas[3]++ "COLOR" -> jugadas[4]++ "ESCALERA" -> jugadas[5]++ "TRIO" -> jugadas[6]++ "DOBLE PAREJA" -> jugadas[7]++ "PAREJA" -> jugadas[8]++ "CARTA ALTA" -> jugadas[9]++ } var quiengano = -1 var segundo = 0 loop@ for(casos in jugadas.indices){ when(jugadas[casos]) { 1->{ quiengano = casos ganador = when(quiengano){ 0 -> "ESCALERA REAL" 1 -> "ESCALERA COLOR" 2 -> "POKER" 3 -> "FULL HOUSE" 4 -> "COLOR" 5 -> "ESCALERA" 6 -> "TRIO" 7 -> "DOBLE PAREJA" 8 -> "PAREJA" 9 -> "CARTA ALTA" else -> "NADA" } break@loop } 2->{ when(casos){ 0 -> { ganador = "Mazos iguales" } 1 ->{ var ultimo = 1 var mazo1 = 0 var mazo2 = 0 loopjugado1@ for (indice in valordelmazovv1.indices) { if (valordelmazovv1[indice] == 1) { if (ultimo == 5) { mazo1 = indice break@loopjugado1 } ultimo++ } } ultimo = 1 println() loopjugado2@ for (indice in valordelmazo.indices){ if (valordelmazo[indice] == 1) { if (ultimo == 5){ mazo2 = indice break@loopjugado2 } ultimo++ } } ganador = if (mazo1 == 0 && mazo2 != 0){ "Mazo 1" }else if (mazo2 == 0 && mazo1 != 0) { "Mazo 2" }else if (mazo1 == mazo2){ "Mazos iguales" }else if (mazo1 > mazo2) { "Mazo 1" } else "Mazo 2" } 2 ->{ var ultimo = 0 var mazo1 = 0 var mazo2 = 0 for (indice in valordelmazovv1.indices) { if (valordelmazovv1[indice] == 1) { if (ultimo == 5) { mazo1 = indice } ultimo++ } } ultimo = 0 for (indice in valordelmazo.indices){ if (valordelmazo[indice] == 1) { if (ultimo == 5){ mazo2 = indice } ultimo++ } } ganador = if (mazo1 == 0 && mazo2 != 0){ "Mazo 1" }else if (mazo2 == 0 && mazo1 != 0) { "Mazo 2" }else if (mazo1 == mazo2){ "Mazos iguales" }else if (mazo1 > mazo2) { "Mazo 1" } else "Mazo 2" } 3 -> { var trio1 = -1 for (indice in valordelmazovv1.indices) { if (valordelmazovv1[indice] == 3) { trio1 = indice } } var trio2 = -1 for (indice in valordelmazo.indices) { if (valordelmazo[indice] == 3) { trio2 = indice } } ganador = if (trio1 == 0 && trio2 != 0) { "Mazo 1" } else if (trio2 == 0 && trio1 != 0) { "Mazo 2" } else if (trio1 == trio2) { "Mazos iguales" } else if (trio1 > trio2) { "Mazo 1" } else "Mazo 2" } 4 ->{ var ultimo = 1 var mazo1 = 0 var mazo2 = 0 loopjugado1@ for (indice in valordelmazovv1.indices) { if (valordelmazovv1[indice] == 1) { if (ultimo == 5 || indice == 0) { mazo1 = indice break@loopjugado1 } ultimo++ } } ultimo = 1 println() loopjugado2@ for (indice in valordelmazo.indices){ if (valordelmazo[indice] == 1) { if (ultimo == 5 || indice == 0){ mazo2 = indice break@loopjugado2 } ultimo++ } } println("mazo1 = $mazo1 mazo2 = $mazo2") ganador = if (mazo1 == 0 && mazo2 != 0){ "Mazo 1" }else if (mazo2 == 0 && mazo1 != 0) { "Mazo 2" }else if (mazo1 == mazo2){ "Mazos iguales" }else if (mazo1 > mazo2) { "Mazo 1" } else "Mazo 2" } 5 ->{ var ultimo = 1 var mazo1 = 0 var mazo2 = 0 loopjugado1@ for (indice in valordelmazovv1.indices) { if (valordelmazovv1[indice] == 1) { if (ultimo == 5 || (indice == 0 && valordelmazovv1[9] == 1 && valordelmazovv1[10] == 1 && valordelmazovv1[11] == 1 && valordelmazovv1[12] == 1)){ mazo1 = indice break@loopjugado1 } ultimo++ } } ultimo = 1 println() loopjugado2@ for (indice in valordelmazo.indices){ if (valordelmazo[indice] == 1) { if (ultimo == 5 || (indice == 0 && valordelmazovv1[9] == 1 && valordelmazovv1[10] == 1 && valordelmazovv1[11] == 1 && valordelmazovv1[12] == 1)){ mazo2 = indice break@loopjugado2 } ultimo++ } } println("mazo1 = $mazo1 mazo2 = $mazo2") ganador = if (mazo1 == 0 && mazo2 != 0){ "Mazo 1" }else if (mazo2 == 0 && mazo1 != 0) { "Mazo 2" }else if (mazo1 == mazo2){ "Mazos iguales" }else if (mazo1 > mazo2) { "Mazo 1" } else "Mazo 2" } 6 ->{ var trio1 = -1 for (indice in valordelmazovv1.indices) { if (valordelmazovv1[indice] == 3) { trio1 = indice } } var trio2 = -1 for (indice in valordelmazo.indices) { if (valordelmazo[indice] == 3) { trio2 = indice } } ganador = if (trio1 == 0 && trio2 != 0) { "Mazo 1" } else if (trio2 == 0 && trio1 != 0) { "Mazo 2" } else if (trio1 == trio2) { "Mazos iguales" } else if (trio1 > trio2) { "Mazo 1" } else "Mazo 2" } 7 ->{ var duoone = -1 var duotwo = -1 loopintern@for (indice in valordelmazovv1.indices){ if (segundo == 1){ if (valordelmazovv1[indice] == 2){ duotwo = indice segundo = 0 break@loopintern } } if (valordelmazovv1[indice] == 2 && segundo == 0){ duoone = indice segundo = 1 } } var duoone2 = -1 var duotwo2 = -1 segundo = 0 loopintern@for (indice in valordelmazo.indices){ if (segundo == 1){ if (valordelmazo[indice] == 2){ duotwo2 = indice segundo = 0 break@loopintern } } if (valordelmazo[indice] == 2 && segundo == 0){ duoone2 = indice segundo = 1 } } ganador = if (duoone == 0 && duoone2 != 0) { "Mazo 1" } else if (duoone2 == 0 && duoone != 0) { "Mazo 2" } else if (duoone == duoone2) { when { duotwo == duotwo2 -> { "Mazos iguales" } duotwo > duotwo2 -> { "Mazo 1" } else -> { "Mazo 2" } } } else if (duoone > duoone2) { "Mazo 1" } else "Mazo 2" } 8 ->{ var ultimo = 1 var mazo1 = 0 var mazo2 = 0 var duoone = -1 var segundo = false for (indice in valordelmazovv1.indices){ if (valordelmazovv1[indice] == 2){ duoone = indice ultimo = 2 } } loopjugado1@ for (indice in valordelmazovv1.indices) { if (valordelmazovv1[indice] == 1) { if (ultimo == 4 || (indice == 0)){ mazo1 = if (indice == 0) 14 else indice break@loopjugado1 } ultimo++ } } ultimo = 1 var duoone2 = -1 for (indice in valordelmazo.indices){ if (valordelmazo[indice] == 2){ duoone2 = indice ultimo = 2 } } loopjugado2@ for (indice in valordelmazo.indices){ if (valordelmazo[indice] == 1) { if (ultimo == 4 || (indice == 0)){ mazo2 = if (indice == 0) 14 else indice break@loopjugado2 } ultimo++ } } ganador = if (duoone == 0 && duoone2 != 0) { "Mazo 1" } else if (duoone2 == 0 && duoone != 0) { "Mazo 2" } else if (duoone == duoone2) { when { mazo1 > mazo2 -> "Mazo 1 " mazo1 < mazo2 -> "Mazo 2 " else -> "Mazos iguales" } } else if (duoone > duoone2) { "Mazo 1" } else "Mazo 2" } 9 ->{ var ultimo = 1 var mazo1 = 0 var mazo2 = 0 loopjugado1@ for (indice in valordelmazovv1.indices) { if (valordelmazovv1[indice] == 1) { if (ultimo == 5 || (indice == 0)){ mazo1 = indice break@loopjugado1 } ultimo++ } } ultimo = 1 println() loopjugado2@ for (indice in valordelmazo.indices){ if (valordelmazo[indice] == 1) { if (ultimo == 5 || (indice == 0)){ mazo2 = indice break@loopjugado2 } ultimo++ } } println("mazo1 = $mazo1 mazo2 = $mazo2") ganador = if (mazo1 == 0 && mazo2 != 0){ "Mazo 1" }else if (mazo2 == 0 && mazo1 != 0) { "Mazo 2" }else if (mazo1 == mazo2){ "Mazos iguales" }else if (mazo1 > mazo2) { "Mazo 1" } else "Mazo 2" } else ->{ "ERROR 5: JUGADA NO ENCONTRADA" } } } } } return ganador } fun reconocerjugada(jugadapa : List): String{ var palosutilizados = arrayOf(0,0,0,0) var mazosutilizados = arrayOf(0,0,0,0,0,0,0,0,0,0,0,0,0) var result = "NADA" for (palos in jugadapa){ when(palos.palo){ 'S' -> palosutilizados[0]++ 'C' -> palosutilizados[1]++ 'D' -> palosutilizados[2]++ 'H' -> palosutilizados[3]++ } } for (valores in jugadapa){ when(valores.valor){ 'A' -> mazosutilizados[0]++ '2' -> mazosutilizados[1]++ '3' -> mazosutilizados[2]++ '4' -> mazosutilizados[3]++ '5' -> mazosutilizados[4]++ '6' -> mazosutilizados[5]++ '7' -> mazosutilizados[6]++ '8' -> mazosutilizados[7]++ '9' -> mazosutilizados[8]++ 'T' -> mazosutilizados[9]++ 'J' -> mazosutilizados[10]++ 'Q' -> mazosutilizados[11]++ 'K' -> mazosutilizados[12]++ } } var colornm =true for (palo in palosutilizados){ if (palo == 5){ result = "COLOR" colornm = false for (position in mazosutilizados.indices){ result = if (position < 9){ if (1 == mazosutilizados[position] && 1 == mazosutilizados[position+1] && 1 == mazosutilizados[position+2] && 1 == mazosutilizados[position+3] && 1 == mazosutilizados[position+4]) "ESCALERA COLOR" else continue }else if (position == 9){ if (1 == mazosutilizados[position] && 1 == mazosutilizados[position+1] && 1 == mazosutilizados[position+2] && 1 == mazosutilizados[position+3] && 1 == mazosutilizados[0]) "ESCALERA REAL" else break }else break } } } if (colornm) { var trio = false var doblenms = 0 for (position in mazosutilizados.indices) { if (mazosutilizados[position] == 4) { result = "POKER" break } else if (mazosutilizados[position] == 1 && position <= 9) { if (position < 9) { if (1 == mazosutilizados[position] && 1 == mazosutilizados[position + 1] && 1 == mazosutilizados[position + 2] && 1 == mazosutilizados[position + 3] && 1 == mazosutilizados[position + 4]) { result = "ESCALERA" break } else { continue } } else if (position == 9) { if (1 == mazosutilizados[position] && 1 == mazosutilizados[position + 1] && 1 == mazosutilizados[position + 2] && 1 == mazosutilizados[position + 3] && 1 == mazosutilizados[0]) { result = "ESCALERA FIGURAS" break } else continue } else continue } else { if (mazosutilizados[position] == 3) trio = true if (mazosutilizados[position] == 2) doblenms++ result = if ((doblenms == 1) && trio) "FULL HOUSE" else if ((doblenms == 0) && trio) "TRIO" else if (doblenms == 1) "PAREJA" else if (doblenms == 2) "DOBLE PAREJA" else "CARTA ALTA" } } } return result } fun escalerinha(mazoenmesanm: String) : Boolean{ var escorrecto = false for (caracteres in 0..4 step 2){ for (caracteresRepite in caracteres+2..8 step 2){ if ((mazoenmesanm[caracteres] == mazoenmesanm[caracteresRepite]) && (mazoenmesanm[caracteres+1] == mazoenmesanm[caracteresRepite+1])){ escorrecto = true } } } return escorrecto } fun valido(cartasenlamesa : String) : Boolean{ var result = true if (cartasenlamesa.length == 10 && !escalerinha(cartasenlamesa)) { for (indice in 1..9 step 2) { result = !( cartasenlamesa[indice] == paloss.palos[0] || cartasenlamesa[indice] == paloss.palos[1] || cartasenlamesa[indice] == paloss.palos[2] || cartasenlamesa[indice] == paloss.palos[3]) } }else { println("No forma ningun mazo, por favor, ingrese de nuevo: ") } return result } fun main() { var cartasenlamesa : String var leermesa : String val jugada = arrayListOf() val jugada2 = arrayListOf() println("Mazo del primer jugador:") do { cartasenlamesa = readLine()!!.toString().toUpperCase() }while (valido(cartasenlamesa)) println("Mazo del segundo jugador:") do { leermesa = readLine()!!.toString().toUpperCase() }while (valido(leermesa)) jugada.add(mazojugado(valor = cartasenlamesa[0], palo = cartasenlamesa[1])) || jugada.add(mazojugado(valor = cartasenlamesa[2], palo = cartasenlamesa[3])) || jugada.add(mazojugado(valor = cartasenlamesa[4], palo = cartasenlamesa[5])) || jugada.add(mazojugado(valor = cartasenlamesa[6], palo = cartasenlamesa[7])) || jugada.add(mazojugado(valor = cartasenlamesa[8], palo = cartasenlamesa[9])) jugada2.add(mazojugado(valor = leermesa[0], palo = leermesa[1])) || jugada2.add(mazojugado(valor = leermesa[2], palo = leermesa[3])) || jugada2.add(mazojugado(valor = leermesa[4], palo = leermesa[5])) || jugada2.add(mazojugado(valor = leermesa[6], palo = leermesa[7])) || jugada2.add(mazojugado(valor = leermesa[8], palo = leermesa[9])) val jugadapa = jugada.sortedWith(compareBy {it.valor}) val segundaplay = jugada2.sortedWith(compareBy {it.valor}) println("Judada 1") for (indice in jugadapa.indices) { print("${jugadapa[indice].valor}${jugadapa[indice].palo} ") } println("\nJudada 2") for (indice in segundaplay.indices) { print("${segundaplay[indice].valor}${segundaplay[indice].palo} ") } val resultado1 = reconocerjugada(jugadapa) val resultado2 = reconocerjugada(segundaplay) println("\nMazo1 $cartasenlamesa es: $resultado1") println("Mazo 2 $leermesa es: $resultado2") println("El mejor mazo es: "+mejormazo(jugadapa, segundaplay, resultado1, resultado2)) }