This is one of my favorite settings for honing my programming skills. In addition to enjoying the challenge and never looking up the answer, each year I had a specific focus:
- In 2021 I focused on learning Rust.
- In 2022 I focused on optimizing my solutions until they are faster than any other solution I know of (see reddit).
- In 2023 I focused on solving the problems quickly and having very good error handling.
Some solutions I'm especially proud of:
- 2022 day 16, which forced me to find and implement an algorithm that would be efficient enough (branch and bound). It took me 10 hours and was the closest I got to giving up on a problem.
- 2022 day 20, for which I invented a linked list where each node points to some generic number of steps after it and 1 step behind it.
- 2022 day 23, where I learned to work with SIMD, and came up with some ideas that later went into my work on lending iterators.
- 2023 day 25, where I didn't know the classical way of solving it (max-flow/min-cut), and invented a different algorithm that was tailored to this problem and turned out to have the same complexity.