package codigos /************Data class es una clase especial de KOTLIN que * te abstrae de los getters y setters o implementa automaticamente**/ data class CartaJugada(val valor: Char, val palo: Char) fun main() { val jugada = arrayListOf() println("Leer Jugada: ") var CartaJugadasMesa : String do { CartaJugadasMesa = readLine()!!.toString().toUpperCase() }while (Valido(CartaJugadasMesa)) /*********Analiza Jugada************/ jugada.add(CartaJugada(valor = CartaJugadasMesa[0], palo = CartaJugadasMesa[1])) jugada.add(CartaJugada(valor = CartaJugadasMesa[2], palo = CartaJugadasMesa[3])) jugada.add(CartaJugada(valor = CartaJugadasMesa[4], palo = CartaJugadasMesa[5])) jugada.add(CartaJugada(valor = CartaJugadasMesa[6], palo = CartaJugadasMesa[7])) jugada.add(CartaJugada(valor = CartaJugadasMesa[8], palo = CartaJugadasMesa[9])) val jugadaOrdenada = jugada.sortedWith(compareBy {it.valor}) print("JUGADA REALIZADA ${jugadaOrdenada[0].valor}${jugadaOrdenada[0].palo} ${jugadaOrdenada[1].valor}${jugadaOrdenada[1].palo} ${jugadaOrdenada[2].valor}${jugadaOrdenada[2].palo} ${jugadaOrdenada[3].valor}${jugadaOrdenada[3].palo} ${jugadaOrdenada[4].valor}${jugadaOrdenada[4].palo}") println(" es un/a ${analizaJugadaOrdenada(jugadaOrdenada)}") } fun Valido(CartaJugadasMesa : String) : Boolean{ var result = true if (CartaJugadasMesa.length == 10 && !encuentraRepetidos(CartaJugadasMesa)) { for (indice in 1..9 step 2) { result = !( CartaJugadasMesa[indice] == Const.PALOS[0] || CartaJugadasMesa[indice] == Const.PALOS[1] || CartaJugadasMesa[indice] == Const.PALOS[2] || CartaJugadasMesa[indice] == Const.PALOS[3]) } }else { println("INVALIDO.\nIngrese de nuevo: ") } return result } fun encuentraRepetidos(cartasMesa: String) : Boolean{ var mantieneCorrecto = false for (caracteres in 0..4 step 2){ for (caracteresRepite in caracteres+2..8 step 2){ if ((cartasMesa[caracteres] == cartasMesa[caracteresRepite]) && (cartasMesa[caracteres+1] == cartasMesa[caracteresRepite+1])){ mantieneCorrecto = true } } } return mantieneCorrecto } fun analizaJugadaOrdenada(jugadaOrdenada : List): String{ var palosJugados = arrayOf(0,0,0,0) var valoresJugados = arrayOf(0,0,0,0,0,0,0,0,0,0,0,0,0) var result: String = "NADA" for (palos in jugadaOrdenada){ when(palos.palo){ 'S' -> palosJugados[0]++ 'C' -> palosJugados[1]++ 'D' -> palosJugados[2]++ 'H' -> palosJugados[3]++ } } for (valores in jugadaOrdenada){ when(valores.valor){ 'A' -> valoresJugados[0]++ '2' -> valoresJugados[1]++ '3' -> valoresJugados[2]++ '4' -> valoresJugados[3]++ '5' -> valoresJugados[4]++ '6' -> valoresJugados[5]++ '7' -> valoresJugados[6]++ '8' -> valoresJugados[7]++ '9' -> valoresJugados[8]++ 'T' -> valoresJugados[9]++ 'J' -> valoresJugados[10]++ 'Q' -> valoresJugados[11]++ 'K' -> valoresJugados[12]++ } } var noEsColor =true for (palo in palosJugados){ if (palo == 5){ result = "COLOR" noEsColor = false for (position in valoresJugados.indices){ result = if (position < 9){ if (1 == valoresJugados[position] && 1 == valoresJugados[position+1] && 1 == valoresJugados[position+2] && 1 == valoresJugados[position+3] && 1 == valoresJugados[position+4]) "ESCALERA COLOR" else continue }else if (position == 9){ if (1 == valoresJugados[position] && 1 == valoresJugados[position+1] && 1 == valoresJugados[position+2] && 1 == valoresJugados[position+3] && 1 == valoresJugados[0]) "ESCALERA COLOR REAL" else break }else break } } } // Jugadas posibles para 5 palos iguales if (noEsColor) { var tieneTrio = false var cantDobles = 0 for (position in valoresJugados.indices) { if (valoresJugados[position] == 4) { result = "POKER" break } else if (valoresJugados[position] == 1 && position <= 9) { if (position < 9) { if (1 == valoresJugados[position] && 1 == valoresJugados[position + 1] && 1 == valoresJugados[position + 2] && 1 == valoresJugados[position + 3] && 1 == valoresJugados[position + 4]) { result = "ESCALERA" break } else { continue } } else if (position == 9) { if (1 == valoresJugados[position] && 1 == valoresJugados[position + 1] && 1 == valoresJugados[position + 2] && 1 == valoresJugados[position + 3] && 1 == valoresJugados[0]) { result = "ESCALERA FIGURAS" break } else break } else break } // Controla para ESCALERA else { if (valoresJugados[position] == 3) tieneTrio = true if (valoresJugados[position] == 2) cantDobles++ result = if ((cantDobles == 1) && tieneTrio) "FULL" else if ((cantDobles == 0) && tieneTrio) "TRIO" else if (cantDobles == 1) "PAREJA" else if (cantDobles == 2) "PAREJA DOBLE" else "CARTA ALTA" } } } return result }