The Walking Robot Simulation solutions are below.
23 Oct 2025•C++ / Java
Walking Robot Simulation
C++ and Java solutions for Walking Robot Simulation.
Solution files
C++•walking-robot-simulation/solution.cpp
class Solution {
public:
int robotSim(vector<int>& commands, vector<vector<int>>& obstacles) {
int multiplier = 60001;
unordered_set<int> obsCordHashes;
for (auto& obsCord : obstacles) {
int oneDCord = getOneDCord(obsCord[0], obsCord[1], multiplier);
obsCordHashes.insert(oneDCord);
}
int maxDistSq = 0;
int currDir = 0;
vector<int> currCord = {0, 0};
vector<vector<int>> dirs = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
for (auto com : commands) {
if (com > 0) {
vector<int> dir = dirs[currDir];
while (com-- > 0) {
int nextX = currCord[0] + dir[0];
int nextY = currCord[1] + dir[1];
int currOneDCord = getOneDCord(nextX, nextY, multiplier);
if (obsCordHashes.count(currOneDCord)) {
break;
}
currCord[0] = nextX;
currCord[1] = nextY;
}
maxDistSq = max(maxDistSq, currCord[0] * currCord[0] + currCord[1] * currCord[1]);
} else {
if (com == -2) {
currDir = (currDir + 3) % 4;
} else {
currDir = (currDir + 1) % 4;
}
}
}
return maxDistSq;
}
private:
int getOneDCord(int x, int y, int mul) {
return x + mul * y;
}
};Java•walking-robot-simulation/solution.java
class Solution {
public int robotSim(int[] commands, int[][] obstacles) {
int multiplier = 60001;
Set<Integer> obsCordHashes = new HashSet<>();
for (var obsCord : obstacles) {
int oneDCord = getOneDCord(obsCord[0], obsCord[1], multiplier);
obsCordHashes.add(oneDCord);
}
int maxDistSq = 0;
int currDir = 0;
int currCord[] = {0, 0};
int dirs[][] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
for (var com : commands) {
if (com > 0) {
int dir[] = dirs[currDir];
while (com-- > 0) {
int nextX = currCord[0] + dir[0];
int nextY = currCord[1] + dir[1];
int currOneDCord = getOneDCord(nextX, nextY, multiplier);
if (obsCordHashes.contains(currOneDCord)) {
break;
}
currCord[0] = nextX;
currCord[1] = nextY;
}
maxDistSq = Math.max(maxDistSq, currCord[0] * currCord[0] + currCord[1] * currCord[1]);
} else {
if (com == -2) {
currDir = (currDir + 3) % 4;
} else {
currDir = (currDir + 1) % 4;
}
}
}
return maxDistSq;
}
private int getOneDCord(int x, int y, int mul) {
return x + mul * y;
}
}