/*
* 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