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.


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:


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


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



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:


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


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


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

Yan Cui

I’m an AWS Serverless Hero and the author of Production-Ready Serverless. I have run production workload at scale in AWS for nearly 10 years and I have been an architect or principal engineer with a variety of industries ranging from banking, e-commerce, sports streaming to mobile gaming. I currently work as an independent consultant focused on AWS and serverless.

You can contact me via Email, Twitter and LinkedIn.

Hire me.