Untitled

 avatar
unknown
plain_text
10 days ago
1.2 kB
1
Indexable
fun solution(R: Array<String>): Int {
    val n = R.size
    val m = R[0].length
    val grid = Array(n) { BooleanArray(m) { false } }
    var x = 0
    var y = 0
    var dx = 1
    var dy = 0
    var cleanedCount = 0

    while (true) {
        if (!grid[x][y]) {
            grid[x][y] = true
            cleanedCount++
        }

        val nextX = x + dx
        val nextY = y + dy

        if (nextX in 0 until n && nextY in 0 until m && R[nextX][nextY] == '.') {
            x = nextX
            y = nextY
        } else {
            // Rotate clockwise
            when {
                dx == 1 && dy == 0 -> { dx = 0; dy = 1 }
                dx == 0 && dy == 1 -> { dx = -1; dy = 0 }
                dx == -1 && dy == 0 -> { dx = 0; dy = -1 }
                dx == 0 && dy == -1 -> { dx = 1; dy = 0 }
            }

            // Check if the robot is stuck in a corner or against a wall
            if ((x == 0 || x == n - 1 || R[x + dx][y] == 'X') &&
                (y == 0 || y == m - 1 || R[x][y + dy] == 'X') &&
                (x == 0 || y == 0 || x == n - 1 || y == m - 1 || R[x + dx][y + dy] == 'X')) {
                break // Robot is stuck, terminate
            }
        }
    }

    return cleanedCount
}
Leave a Comment