C++•walking-robot-simulation/solution.cpp
class Solution {
public:
int robotSim(vector<int>& commands, vector<vector<int>>& obstacles) {
int multiplier = class="syntax-number">60001;
unordered_set<int> obsCordHashes;
for (auto& obsCord : obstacles) {
int oneDCord = getOneDCord(obsCord[class="syntax-number">0], obsCord[class="syntax-number">1], multiplier);
obsCordHashes.insert(oneDCord);
}
int maxDistSq = class="syntax-number">0;
int currDir = class="syntax-number">0;
vector<int> currCord = {class="syntax-number">0, class="syntax-number">0};
vector<vector<int>> dirs = {{class="syntax-number">0, class="syntax-number">1}, {class="syntax-number">1, class="syntax-number">0}, {class="syntax-number">0, -class="syntax-number">1}, {-class="syntax-number">1, class="syntax-number">0}};
for (auto com : commands) {
if (com > class="syntax-number">0) {
vector<int> dir = dirs[currDir];
while (com-- > class="syntax-number">0) {
int nextX = currCord[class="syntax-number">0] + dir[class="syntax-number">0];
int nextY = currCord[class="syntax-number">1] + dir[class="syntax-number">1];
int currOneDCord = getOneDCord(nextX, nextY, multiplier);
if (obsCordHashes.count(currOneDCord)) {
break;
}
currCord[class="syntax-number">0] = nextX;
currCord[class="syntax-number">1] = nextY;
}
maxDistSq = max(maxDistSq, currCord[class="syntax-number">0] * currCord[class="syntax-number">0] + currCord[class="syntax-number">1] * currCord[class="syntax-number">1]);
} else {
if (com == -class="syntax-number">2) {
currDir = (currDir + class="syntax-number">3) % class="syntax-number">4;
} else {
currDir = (currDir + class="syntax-number">1) % class="syntax-number">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 = class="syntax-number">60001;
Set<Integer> obsCordHashes = new HashSet<>();
for (var obsCord : obstacles) {
int oneDCord = getOneDCord(obsCord[class="syntax-number">0], obsCord[class="syntax-number">1], multiplier);
obsCordHashes.add(oneDCord);
}
int maxDistSq = class="syntax-number">0;
int currDir = class="syntax-number">0;
int currCord[] = {class="syntax-number">0, class="syntax-number">0};
int dirs[][] = {{class="syntax-number">0, class="syntax-number">1}, {class="syntax-number">1, class="syntax-number">0}, {class="syntax-number">0, -class="syntax-number">1}, {-class="syntax-number">1, class="syntax-number">0}};
for (var com : commands) {
if (com > class="syntax-number">0) {
int dir[] = dirs[currDir];
while (com-- > class="syntax-number">0) {
int nextX = currCord[class="syntax-number">0] + dir[class="syntax-number">0];
int nextY = currCord[class="syntax-number">1] + dir[class="syntax-number">1];
int currOneDCord = getOneDCord(nextX, nextY, multiplier);
if (obsCordHashes.contains(currOneDCord)) {
break;
}
currCord[class="syntax-number">0] = nextX;
currCord[class="syntax-number">1] = nextY;
}
maxDistSq = Math.max(maxDistSq, currCord[class="syntax-number">0] * currCord[class="syntax-number">0] + currCord[class="syntax-number">1] * currCord[class="syntax-number">1]);
} else {
if (com == -class="syntax-number">2) {
currDir = (currDir + class="syntax-number">3) % class="syntax-number">4;
} else {
currDir = (currDir + class="syntax-number">1) % class="syntax-number">4;
}
}
}
return maxDistSq;
}
private int getOneDCord(int x, int y, int mul) {
return x + mul * y;
}
}