/* * 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" }
Preview:
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