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

## Day 13

See details of the challenge here.

Today’s challenge involves solving two separate problems:

**counting set bits in an integer****level order tree traversal**

For the first problem, I recommend reading through this blog post which covers several approaches and optimizations for this well defined problem.

I experimented with 3 of the solutions described in the post, and the results were telling. I skipped the lookup table version because I don’t feel it makes sense in the context of this AOC challenge.

I recently posted about Level Order Tree Traversal in F# recently, which I also used to solve Day 11. We can apply the same technique and optimization (not counting a previously visited coordinate) here and use * Seq.unfold* to return an infinite sequence of move count with all the new coordinates that are visited in that move.

Another optimization we can apply is to use ** memoization** to avoid computing if a coordinate is an open space more than once.

To solve part 1 we need to find the first round of coordinates that contains our target.

### Part 2

How many locations (distinct x,y coordinates, including your starting location)

can you reach in at most 50 steps?

Since we’ve done most of the hard work with the * travel* function (which returns only the distinct coordinates), the hardest thing about part 2 is to remember to add 1 to account for the starting position (which I forgot to initially of course )

## Links

- Optimizing bit counting
- Day 13 challenge description
- Advent of Code 2015
- Solution for Day 12
- Solution for Day 11
- All my F# solutions for Advent of Code
- Github repo

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