# 1041. Robot Bounded In Circle

#### Medium

***

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

&#x20;

**Example 1:**

```
Input: instructions = "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: instructions = "GG"
Output: false
Explanation: The robot moves north indefinitely.
```

**Example 3:**

```
Input: instructions = "GL"
Output: true
Explanation: The robot moves from (0, 0) -> (0, 1) -> (-1, 1) -> (-1, 0) -> (0, 0) -> ...
```

&#x20;

**Constraints:**

* `1 <= instructions.length <= 100`
* `instructions[i]` is `'G'`, `'L'` or, `'R'`.

```python
class Solution:
    def isRobotBounded(self, instructions: str) -> bool:
        point = 'N'
        x ,y = 0,0
        for char in instructions:
            if char == 'G':
                x,y = self.move(point, [x,y])
                # print(point, x, y)
            elif char == 'L':
                if point == 'N':
                    point = 'W'
                elif point == 'W':
                    point = 'S'
                elif point == 'S':
                    point = 'E'
                else:
                    point = 'N'
            elif char == 'R':
                if point == 'N':
                    point = 'E'
                elif point == 'E':
                    point = 'S'
                elif point == 'S':
                    point = 'W'
                else:
                    point = 'N'
        # print('Final',point, x, y)
        return True if point != 'N' or (x == 0 and y == 0) else False
                
    def move(self, point, coordinates):
        x,y = coordinates[0], coordinates[1]
        if point == 'N':
            y += 1
        elif point == 'E':
            x += 1
        elif point == 'W':
            x -= 1
        else:
            y -= 1
        return [x,y]py
```
