23 Oct 2025C++ / JavaUnknown

Walking Robot Simulation

notes and solution files for walking robot simulation.

this entry collects the solution files i have for walking robot simulation. i may expand it with a fuller write-up later, but the implementation files are already here.

available solution files

  • C++ walking-robot-simulation/solution.cpp
  • Java walking-robot-simulation/solution.java

Solution files

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;
    }
};
Javawalking-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;
    }
}