The Maze

At Skookum we have an incredibly talented team of engineers. We build software for our clients to solve our client's problems using the latest technologies and methods. In order to stay up to date with the ever-changing landscape of development best practices and tools, we read blog posts (Hackernoon seems to be shared in Slack among our team rather often), we attend conferences (Dockercon, Adaptive Path's UX Intensive, An Event Apart, and others this year), and we build side projects both individually and as teams.

I decided to challenge our teams with a puzzle of sorts. A maze. Given an API for interacting with a JavaScript maze, what team could create the most efficient solution to navigate a random maze from start to finish.

The Code

So I created a Github repo that outlined the API and other rules for the challenge. Our teams had 4 weeks to work on the problem as a team, and then we ran their solutions through a gauntlet of mazes to see who won. Each team presented their solution to the group and explained their approach.

Solutions

The solutions ranged from traditional maze algorithms like wall follower, to computer science algorithms like depth-first search. Other solutions involved a genetic algorithm run over 10,000 times to optimize the decision making at each fork in the maze. And the final (controversial solution) was to take a screenshot of the browser window programmatically and run computer vision analysis on the maze to get the whole dataset and find the shortest path. The most creative solution utilized CSS to restyle the maze into a Pac-Man clone complete with sounds.

Here are some of the solutions in action: wall follower

Wall Follower Algorithm

depth first search

Depth First Search Algorithm

depth first search

Depth First Search Algorithm (with different order of search)

genetic algorithm

Custom Algorithm using decision weightings based on Genetic Algorithm

pac-man

Pac-Man

Check out the Github repo to see some of the code for the solutions.

Why

We did this exercise, because the future of software development isn't going to be user-interface design or data storage and retrieval. The future will be how you collect data and analyze the data to write smarter and smarter algorithms for computers to follow. Artificial intelligence (we're talking self-driving cars not SkyNet) is the use of highly specialized algorithms based on massive amounts of collected data. So, we wanted some practice and to have some fun along the way.