Introduction Link to heading
On an infinite plane, a robot initially stands at (0, 0) and faces north. The robot can receive one of three instructions:
"G": go straight 1 unit;
"L": turn 90 degrees to the left;
"R": turn 90 degress to the right.
The robot performs the instructions given in order, and repeats them forever.
Return true if and only if there exists a circle in the plane such that the robot never leaves the circle.
Example 1:
Input: "GGLLGG"
Output: true
Explanation:
The robot moves from (0,0) to (0,2), turns 180 degrees, and then returns to (0,0).
When repeating these instructions, the robot remains in the circle of radius 2 centered at the origin.
Example 2:
Input: "GG"
Output: false
Explanation:
The robot moves north indefinetely.
Example 3:
Input: "GL"
Output: true
Explanation:
The robot moves from (0, 0) -> (0, 1) -> (-1, 1) -> (-1, 0) -> (0, 0) -> ...
Note:
1 <= instructions.length <= 100
instructions[i] is in {'G', 'L', 'R'}
Solution Link to heading
Simple emulator solution:
func isRobotBounded(instructions string) bool {
    x, y := 0, 0
    d := 0
    for i := 0; i < 1000; i++ {
        for _, ins := range instructions {
            if ins == 'G' {
                switch d {
                    case 0:
                        x++
                    case 1:
                        y--
                    case 2:
                        x--
                    case 3:
                        y++
                }
            } else if ins == 'L' {
                if d == 3 {
                    d = 0
                } else {
                    d++
                }                
            } else if ins == 'R' {
                if d == 0 {
                    d = 3
                } else {
                    d--
                }
            }
        }
         if x == 0 && y == 0 {
            return true
        }        
    }
    return false
}
Explanation Link to heading
This problem is good example how to build emulator solutions.
I selected 1000 at a big number to detect loops, it could be other way to do this (to check how far became points from time to time).