This year marks the first time I’ve been so thorough with my documentation & problem solving. I’ve tried Advent of Code before in 2024 but I’ve given up after about day three 🤔 with no history whatsoever.

I’ve managed to fully complete 8 challenges and partially complete 2 challenges, but what I’m most proud of is how much I’ve learned & applied, from topics such as DFS with memoization to P and NP problems. I’ve never expected problems to be so complicated, and most of the topics were stuff I’ve met with only in theoretical form. Having to actually implement a working prototype is a step forward to a better understanding.

Anyway, here’s a leaderboard I’ve used to motivate myself on days I’ve felt like skipping - it really helped to have a positive competition.


What is Advent of Code?#

Taken straight from the About page:

Advent of Code is an Advent calendar of small programming puzzles for a variety 
of skill levels that can be solved in any programming language you like. 
People use them as interview prep, company training, university coursework, 
practice problems, a speed contest, or to challenge each other.

It’s basically a yearly competition centered around logical programming problems. I say logical because (something I’ve acknowledged this year too!) you don’t actually need to solve the general problem - you just need to solve for the given input.

What I expected#

Given my previous interaction with the event, I expected some general problems centered around basic concepts, maybe some string manipulations, some simple mathematical operations and general algorithms, all with a holiday twist.

Also, I expected the lack of motivation - expecially when the difficulty grows.

What I’ve learned#

First, there’s a lot of stuff I did not know. Most of it boils down to Python libraries, such as itertools - I heard about it, but I did not had the opportunity to use it, or to programming concepts that I’ve mentioned earlier. Also z3, I still don’t understand what this library is supposed to do …

I’ve also tried a new programming paradigm, test driven development, where I first write some basic test functionality using assert and I move on only after these tests pass. It’s pretty neat and very good at catching bugs if you modify the original algorithm.

Second, reading other people’s work. Moreover when I did not know how to continue. I can’t say I did the problem by myself, but if I understand the thinking behind the solution, at least I’ve learned something from this situation 😊.

What I plan to do in the future#

I’ll surely come again this year! That’s a must.

Until then, I want to do some stuff:

  • try previous challenges (maybe in other languages too - for some additional practice)
  • look for other competitions, mainly because this aspect makes me wanna stick to the task at hand
  • share the event with others, because it’s easier when you do it together
  • learn a bit about highly theoretical aspects of programming (such as combinatorics)

To finish with a bit of style, I’ll leave you with a riddle.

I am not a name, yet you call me.
I am not a book, yet you return me.
I am not a tree, yet you branch me.
I am not a ball, yet you pass me.

Here’s the answer encoded in base64 : ZnVuY3Rpb24=