Preview:
    /*
* Crea una función que analice una matriz 3x3 compuesta por "X" y "O"
* y retorne lo siguiente:
* - "X" si han ganado las "X"
* - "O" si han ganado los "O"
* - "Empate" si ha habido un empate
* - "Nulo" si la proporción de "X", de "O", o de la matriz no es correcta.
*   O si han ganado los 2.
* Nota: La matriz puede no estar totalmente cubierta.
* Se podría representar con un vacío "", por ejemplo.
*/

    fun exercize() {
        var result = ""
        val myList = arrayListOf(
            listOf("O", "X", "O"),
            listOf("X", "O", "X"),
            listOf("X", "O", "X")
        )

        val flattedList = myList.flatten()
        val xQuantity = flattedList.filter { it == "X" }.size
        val oQuantity = flattedList.filter { it == "O" }.size

        if(flattedList.size != 9 || oQuantity.compareTo(xQuantity)  !in -1..1){
            result = "Nulo"
        }

        if(result != "Nulo")
        {
            result = checkCols(flattedList)
        }
        
        if(result == "Empate")
        {
            result = checkRows(flattedList)
        }

        if(result == "Empate")
        {
            result = checkDiagonals(flattedList)
        }

        println("Result: $result")
    }

    private fun checkCols(flattedList:List<String>):String =
        when{
            ((flattedList[0] == "X" && flattedList[3] == "X" && flattedList[6] == "X") ||
                    (flattedList[1] == "X" && flattedList[4] == "X" && flattedList[7] == "X") ||
                    (flattedList[2] == "X" && flattedList[5] == "X" && flattedList[8] == "X")) -> "X"

            ((flattedList[0] == "O" && flattedList[3] == "O" && flattedList[6] == "O") ||
                    (flattedList[1] == "O" && flattedList[4] == "O" && flattedList[7] == "O") ||
                    (flattedList[2] == "O" && flattedList[5] == "O" && flattedList[8] == "O")) -> "O"

            else -> "Empate"
        }

    private fun checkRows(flattedList:List<String>):String =
        when{
            ((flattedList[0] == "X" && flattedList[1] == "X" && flattedList[2] == "X") ||
                    (flattedList[3] == "X" && flattedList[4] == "X" && flattedList[5] == "X") ||
                    (flattedList[6] == "X" && flattedList[7] == "X" && flattedList[8] == "X")) -> "X"

            ((flattedList[0] == "O" && flattedList[1] == "O" && flattedList[2] == "O") ||
                    (flattedList[3] == "O" && flattedList[4] == "O" && flattedList[5] == "O") ||
                    (flattedList[6] == "O" && flattedList[7] == "O" && flattedList[8] == "O")) -> "O"

            else -> "Empate"
        }

    private fun checkDiagonals(flattedList:List<String>):String =
        when{
            ((flattedList[0] == "X" && flattedList[4] == "X" && flattedList[8] == "X") ||
                    (flattedList[2] == "X" && flattedList[4] == "X" && flattedList[6] == "X")) -> "X"

            ((flattedList[0] == "O" && flattedList[4] == "O" && flattedList[8] == "O") ||
                    (flattedList[2] == "O" && flattedList[4] == "O" && flattedList[6] == "O")) -> "O"

            else -> "Empate"
        }
downloadDownload PNG downloadDownload JPEG downloadDownload SVG

Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!

Click to optimize width for Twitter