Poker.kt 2.03 KB
Newer Older
1 2
/*REPOSITORIO GITLAB: https://phoebe.roshka.com/gitlab/yalvarez/kotlin-e004-poker*/

3
class Carta(val valor: Int, val palo: Char)
4

5 6
const val CARAS = "23456789tjqka"
const val LETRAS = "shdc"
7

8

9 10 11 12 13 14
fun esEscalera(cards: List<Carta>): Boolean {
    val ordenar = cards.sortedBy { it.valor }
    if (ordenar[0].valor + 4 == ordenar[4].valor) return true
    if (ordenar[4].valor == 14 && ordenar[0].valor == 2 && ordenar[3].valor == 5) return true
    return false
}
15

16 17 18 19 20
fun esColor(cartas: List<Carta>): Boolean {
    val palo = cartas[0].palo
    if (cartas.drop(1).all { it.palo == palo }) return true
    return false
}
21

22 23 24 25 26
fun jugada(mano: String): String {
    val letraMinuscula = mano.toLowerCase() //RECONOCE LA LETRA MINUSCULA QUE INGRESE
    val dividir = letraMinuscula.split(' ').filterNot { it == "" }.distinct()
    if (dividir.size != 5) return "INVALIDO"
    val cartas = mutableListOf<Carta>()
27

28 29 30 31 32 33 34
    for (s in dividir) {
        if (s.length != 2) return "INVALIDO"
        val fIndex = CARAS.indexOf(s[0])
        if (fIndex == -1) return "INVALIDO"
        val sIndex = LETRAS.indexOf(s[1])
        if (sIndex == -1) return "INVALIDO"
        cartas.add(Carta(fIndex + 2, s[1]))
35
    }
36

37 38 39
    val groups = cartas.groupBy { it.valor }
    when (groups.size) {
        2 -> {
40

41
            return "FULL"
42
        }
43
        3 -> {
44

45 46
            return "DOS PARES"
        }
47 48 49 50 51 52
        4 -> {
            return "UN PAR"
        }
        5 -> {
            return "POKER"
        }
53 54 55 56 57 58 59 60 61
        else -> {
            val color = esColor(cartas)
            val escalera = esEscalera(cartas) //corregir
            when {
                color && escalera -> return "ESCALERA COLOR" //corregir
                color             -> return "COLOR"
                escalera          -> return "ESCALERA" //corregir
                else              -> return "CARTA ALTA"
            }
62 63 64
        }
    }
}
65

66 67
fun main(args: Array<String>) {
    val manos = arrayOf(
68 69
        "ah ad th tc 6s",
        "as 2s 3s 4s 5s"
70 71 72 73 74
    )
    for (mano in manos) {
        println("Jugada:  ${jugada(mano)}")
    }
}