I'm playing a video game right now and in it is a puzzle (see here). There are solutions to solving it (see here) on the Internet, but I'd like to know if this path is the shortest path (least amount of moves) possible to solve the puzzle.
The rules of the game are clear from the video. There is a grid of nodes. The border nodes are bounded with limited path choices. There are three moving bodies. The main one chooses a path that reflects the path choices of the other two. The aim is to guide the other two to land on certain nodes at the same time.
IMPORTANT RULES:
If the guardians face each other and Link, the player, moves in a way to make them collide they, in effect, stay in the same position and Link keeps his move: youtube.com/watch?v=ZNnSwc0w1oE#t=4m58s
Top-guardian-Link conga allowed: youtube.com/watch?v=oUh88KsZYCc#t=3m53s – Liz Wesley 21 mins ago
The game ends if the player jumps on a square that a guardian is set to jump on at the same time: youtube.com/watch?v=ZNnSwc0w1oE#t=2m55s
I'm seeking a shortest path proof based on this game's rules. Any help would be appreciated.
It is important to note that the top guardian moves in the opposite direction as link and the bottom guardian mimics Link's direction.
Daniel Wagner's 12-step Haskell Solution:

Guardian Path Overlay:


Under a few assumptions, I compute that the shortest path requires 12 steps; the player should make the moves ESNNNWWSSSEN. (This is one step shorter than the two solutions you linked to.) The assumptions I made are:
Below I include a full code listing (in Haskell) which describes the game and performs A* search as implemented by the astar package to find a minimal path. As a heuristic, we consider the two ways of pairing guardians and goal cells; in each pairing, we compute the Manhattan distance of the guardian that has farther to walk, then take the smaller maximum distance from these two pairings. This is certainly admissible, since we must take at least as many steps as the guardians are away from their goal cells. Assumption (1) is encoded in
stepValid; (2) inunsafeMove; (3)-(5) inmovementIsValid. Shorter solutions may be possible if these assumptions are incorrect.