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).