Untitled
unknown
plain_text
10 months ago
1.2 kB
13
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
}Editor is loading...
Leave a Comment