Advent of Code F# – Day 10

The source code for this post (both Part 1 and Part 2) is avail­able here and you can click here to see my solu­tions for the oth­er Advent of Code chal­lenges.

Descrip­tion for today’s chal­lenge is here.

 

Day 10 is nice and easy, and the solu­tion I came up with is less than 20 lines of code, so I’m gonna leave it here and walk you through it:

day10_01

So the bulk of the way hap­pens in the fold inside the read func­tion, which, start­ing with the emp­ty list as the accu­mu­lat­ed state, the fol­low­ing hap­pened:

  1. saw ‘3’, acc state became [ (1, ‘3’) ]
  2. saw ‘1’, head of acc state is on ‘3′, so acc sate became [ (1, ‘1′); (1, ‘3’) ]
  3. saw ‘1’, head of acc state is also on ‘1′, so acc state became [ (2, ‘1′); (1, ‘3’) ]
  4. saw ‘3’, head of acc state is on ‘1′, so acc state became [ (1, ‘3′); (2, ‘1′); (1, ‘3’) ]

After the fold, we still need to reverse the list, and then con­struct the out­put string as “132123…”.

To answer the chal­lenge, we just iter­a­tive­ly apply the read func­tion (I used a fold here, but you can equal­ly just write it as a recur­sive func­tion), and voila!

Part 2 is iden­ti­cal, with the only dif­fer­ence being that read is invoked 50 times instead of 40.