Advent of Code F# – Day 18

The source code for this post (both Part 1 and Part 2) is available here and you can click here to see my solutions for the other Advent of Code challenges.

Description for today’s challenge is here.

 

This is a modified version of the Day 6 challenge, with a twist of course.

So, we’ll start by creating a 100×100 2D array to represent our grid of lights. As per the instruction, we’ll read the input and use # to set the original state of a light to ON, and . to set the original state of a light to OFF.

day18_01

Next, let’s add a function to count the number of neighbours that are ON, whilst taking into account that lights on the edge of the grid won’t have all 8 neighbours:

day18_02

Then we’ll simulate 100 steps, each step would use the state from the previous step in a fold:

day18_03

Finally, count the number of lights that are ON in the state after 100 steps:

day18_04v2

 

Part 2

All else stays the same, we just need to inject additional logic to check if the light is one of the corner lights in a few places.

First, let’s add a function to determine if a light is in the corner:

day18_05

and now we need to use it when setting the initial state for our grid:

day18_06

as well as when we step from one state to the next:

day18_07

and that’s it. After you made these couple of changes, all the rest of the code from Part 1 would work like before.

Leave a Reply

Your email address will not be published.