# Advent of Code F# – Day 3

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

## Day 3

See details of the challenge here.

First, let’s capture the input for today’s challenge in a text file, say Day03Input.txt.

Then, let’s create a module to capture the common steps between both parts of the challenge.

There’s really not much to be said about the code snippet above, and the solution for part 1 is also really simple.

### Part 2

Now that you’ve helpfully marked up their design documents, it occurs to you
that triangles are specified in groups of three vertically. Each set of three
numbers in a column specifies a triangle. Rows are unrelated.

For example, given the following specification, numbers with the same hundreds
digit would be part of the same triangle:

101 301 501
102 302 502
103 303 503
201 401 601
202 402 602
203 403 603

triangles are possible?

You could, transpose the input (ie, a int[][]) so that you end up with something along the lines of:

101  102  103  201  202  203 …

301  302  303  401  402  403 …

501  502  503  601  602  603 …

which will be easier to process, but it feels like more work than I’d like to do.

An alternative approach – the one I went with – is to use Seq.chunkBySize to group row indices into chunks of 3. For each chunk you can flat map (in F#, that’s Seq.collect) it to 3 triangles.

After that, it’s a case of applying the isFilter function we declared earlier on the resulting sequence.