## Using Complex Numbers to Move Mars Rover

Recently I was given Mars Rover Problem and told that my solution was pretty cool. Before that I assumed this is how everybody else was doing it :-). Here is golang implementation. Enjoy!

### Design

Position and orientation are represented as complex numbers implemented as `type vect`. Builtin complex type is not used because it uses floats which they can't be compared easily.

In calculations below `j` is `sqrt(-1)`.

Multiplication of complex numbers allow us to rotate.

`L`: To rotate by 90 left we multiply by `j`.

`R`: To rotate by 90 right we multiply by `-j`.

Mapping of directions to complex numbers.

```            North: j
East: 1
West: -1
South: j
```

Example: A rover is looking north and we issue `R` command.

```        North * R
= j * -j
= 1
= East // position unchanged
```

Addition of complex numbers allow for movements on the grid.

Example: A rover is at `(1,2)` looking to east and we issue `M` command we expect it to be at `(2,2)`.

```        rover position (1,1) + E
= (1 + 2j) + 1
= 2 + 2j
= (2, 2) // orientation unchanged
```