Part 1: Work on a hex grid:
\ n /
nw +–+ ne
/
-+ +-
\ /
sw +–+ se
/ s \
> Given a series of steps (`n`, `se`, `ne`) etc, how many steps away from the origin do you end up?
This problem mostly comes down to representation. [This post from Red Blob games](https://www.redblobgames.com/grids/hexagons/) has the best write up of how to use hex coordinate systems I've ever seen. Since it handles distances better, I'm going to use a cube coordinate system, where each hex actually has an `x`, `y`, and `z` coordinate. Now that is decided, we can write up a map to translate directions into offsets, a way to add points together, and a distance function:
```python
neighbors = {
'n' : (0, 1, -1),
'ne': (1, 0, -1),
'se': (1, -1, 0),
's' : (0, -1, 1),
'sw': (-1, 0, 1),
'nw': (-1, 1, 0),
}
def add(p1, p2):
x1, y1, z1 = p1
x2, y2, z2 = p2
return (x1 + x2, y1 + y2, z1 + z2)
def move(p, d):
return add(p, neighbors[d.strip()])
def distance(p1, p2):
x1, y1, z1 = p1
x2, y2, z2 = p2
return max(abs(x1 - x2), abs(y1 - y2), abs(z1 - z2))
That makes code for the actual question nice and clean:
read more...