This series looks at the Advent of Code challenges.
I started the Advent of Code at the beginning of December 2020, but life quickly got in the way. Weekends especially, where I try to get away from the computer, so I fell behind. However, I did work through a few, and one of my goals in 2021 is to get through all of them.
I’m going to document my solutions on my blog.
Day 1
The first thing I did was set up a template for the solutions. This is clearly important, and I used some basic ASCII art.
From here, I tackled the challenge. This is one suited for databases, as there is the need to take a list of numbers and find two that add up to 2020. I created a simple table that contained a single column to store numbers.
CREATE TABLE Day1 ( datavalue INT) GO
In here I inserted the test data from the challenge.
The easy way for me to tackle this quickly was cross join the numbers with a sum. I put this in a CTE, which gives me the sum of all individual numbers.
WITH cteCalc (a, b, sumab) AS ( SELECT a.datavalue, b.datavalue, a.datavalue + b.datavalue AS sumoftwo FROM Day1 a CROSS JOIN day1 b)
Once I had this, in the outer query I added a WHERE that limited the results to the sum being equal to 2020, and for the column list, I produced the product.
WITH cteCalc (a, b, sumab) AS ( SELECT a.datavalue, b.datavalue, a.datavalue + b.datavalue AS sumoftwo FROM Day1 a CROSS JOIN day1 b) SELECT a, b, a * b AS solution FROM cteCalc WHERE sumab = 2020; go
This gave me the result.
As a hint, I used BULK INSERT to load the complete data from the test file into my table.
Part 2
Each challenge has two parts, with the same data. In this one, I had to find 3 entries that summed to 2020. I just added another cross join and this was solved.
WITH cteCalc (a, b, c, sumabc) AS ( SELECT a.datavalue, b.datavalue, c.datavalue, a.datavalue + b.datavalue + c.datavalue AS sumoftthree FROM Day1 a CROSS JOIN day1 b CROSS JOIN day1 c ) SELECT a, b, c, a * b * c AS solution FROM cteCalc WHERE sumabc = 2020; GO
All in all, an easy day. Now I need to solve this in Python.