The implementation does not follow the leetcode assignement.

Leetcode assignement says possible movements are G,L,R.

And here in the implementation you are dealing with S,R

Here’s the updated version.

```
def is_robot_bounded( instructions: str) -> bool:
# Current position.
x, y = 0 , 0
# Direction
dx, dy = 0 , 1 # starts pointing to the north
for I in instructions:
if i == 'L':
dx, dy = -dy, dx # 0, 1 -> -1, 0, -> 0, -1
if I == 'R':
dx, dy = dy, -dx # 0, 1 -> 1, 0 -> 0, -1
if i == 'G':
x = x + dx
y = y + dy
return (x, y) == 0 or (dx, dy) != (0, 0)
```

The return statement should be:

```
return (x, y) == (0, 0) or (dx, dy) != (0, 1)
```

```
def is_robot_bounded(instructions: str) -> bool:
# Current position
x, y = 0, 0
# Direction
dx, dy = 0, 1 # starts pointing to the north
for i in instructions:
if i == "L":
dx, dy = -dy, dx # 0, 1 -> -1, 0, -> 0, -1
elif i == "R":
dx, dy = dy, -dx # 0, 1 -> 1, 0 -> 0, -1
elif i == "G":
x = x + dx
y = y + dy
return (x, y) == (0, 0) or (dx, dy) != (0, 1)
```

You are right!, thanks!