Advent of Code 2020 notes
| Problem statements | Source code
As I said in the 2019 notes, I started AoC in 2021, so 2019 and 2020 were done retrospectively in 2025. There were two remarkable advancements in my CS skills in 2020: (1) I mastered Python to the proficiency of developing mathematical models individually (winning the IMMC competition the winter after); (2) I was tutored for competitive programming so I was fresh off the mint with Dijkstra, DP, etc. On the front of learning languages, I didn't learn any new languages beyond improving my Python, C++, and JavaScript skills, so I chose Python in retrospect for 2020.
2019, 2020, 2021, and 2025 were the only years I did not have language-related issues—the other years, I chose to inflict pain on myself with "other languages" I was less proficient in. Python was enjoyable, and I didn't even take advantage of its package ecosystem—I only used NumPy to a limited extent, and itertools occasionally. Its ast module helped me cheat my way through 18. Python had the best ergonomics for hash maps and sets of all languages I've used so far, thanks to its dynamic typing and literal syntax. Performance was actually okay—similar to my C++ and Haskell solutions, because the problems for this year were not particularly demanding.
Difficulty-wise, I find almost all problems approachable with the exception of 20. In fact, I was on a cruise trip when I solved this year, and I downloaded all problem texts and inputs during shore day, solved them on sea days without Internet, and then uploaded all solutions when we were ashore again (all correct, of course). 20 took the most of said time—probably more than 24 hours combined over a week. The other problems I found non-trivial were: 13, 16, 19, and 21.
