**ps. look out for all my other solutions for Advent of Code challenges here.**

## Day 17

See details of the challenge here.

First, let’s add a * hash* function (that returns the MD5 as a hexadecimal string as we have done so often this year).

Then, add a * step* function that’ll take a (x, y) position and the path (eg.

*“hijklDU”*) leading up to it and returns the a tuple of new position and path if we’re not going to move off grid. We can then use this to construct the more useful functions to take a step in the

*,*

**up***,*

**down***and*

**left***directions.*

**right**Now we can put everything together and write a function to find all the paths from (0, 0) to (3, 3) in the grid.

One minor detail you might have noticed on ln 5 above is that we’re short-circuiting paths that have reached the target, this is in accordance with the further details revealed in part 2 below.

For each of the positions (and the path that lead to it), we use the aforementioned *up*, *down*, *left*, and *right* functions to find the next positions we can reach from here (provided the right doors are open as per determined by the MD5 hash value).

And yes, it’s the Level Order Tree Traveral problem again! Funny we see different reincarnations of this particular problem over and over during this year’s AOC event.

One more detail to look out for in the code snippet above – that it’s possible for there to not be a path (as per the example in the description of the problem). Hence why we terminate the * Seq.unfold* when none of the current positions yields a possible next move.

With this, we can now answer part 1 really easily.

### Part 2

You’re curious how robust this security solution really is, and so you decide to

find longer and longer paths which still provide access to the vault. You

remember that paths always end the first time they reach the bottom-right room

(that is, they can never pass through it, only end in it).

For example:

If your passcode were ihgpwlah, the longest path would take 370 steps.

With kglvqrro, the longest path would be 492 steps long.

With ulqzkmiv, the longest path would be 830 steps long.

What is the length of the longest path that reaches the vault?

## Links

- Day 17 challenge description
- Advent of Code 2015
- Solution for Day 16
- All my F# solutions for Advent of Code
- Github repo

Pingback: Advent of Code F# – Day 18 | theburningmonk.com

Pingback: F# Weekly #52, 2016 – Sergey Tihon's Blog