Just finished this year's Advent of Code. https://adventofcode.com/ I already participated last year. Back then, my motivation was to learn more about Rust. I got carried away in 2021, though: It is very tempting to try to be competitive. So I quickly switched to Python in 2021. I think that's a pretty great language for this kind of thing: It runs fast (enough), it's very powerful, and easy to write. This year, I really wanted to stick to Rust. So, first, no competition. I left (almost) all private leaderboards. Second, learning Rust shenanigans is hard enough -- solving the puzzles on top of that can be too much for me. So I said to myself: If I really get stuck, I won't spend hours trying to solve that puzzle and look for help instead. (I still managed to solve all but three days on my own, which isn't too bad, I guess.) Honestly, I think looking for help makes for a better learning experience. If you're truly stuck and have no idea how to solve a particular problem, then you learn much more if you get a hint in the right direction or maybe a full explanation. I mean, what's the alternative? Suppose you don't know any path finding algorithm (and maybe don't even know what to look for), then how will you solve that puzzle involving a maze? I'd have to *reinvent*, say, Dijkstra's algorithm -- completely unrealistic. Instead, if I look for help, then I can learn: "Aha, that's how you solve this kind of problem." And next time I can do better. So, this year, it was all Rust. I should have made a list, but here's what I remember: - Learned about Rc/Weak and RefCell and how to represent graphs. Also learned about the alternative "arena" implementation of that. - Passing closures around as function pointers. - Enums with attached data for representing linked lists. - Implementing "Ord", so custom objects can be sorted. - Basic multithreading. - Looping over negative ranges ("for x in (width - 1)..=0" doesn't work, but "for x in (0..width).rev()" does the trick). - Breaking out of loops other than the innermost one. :-) And of course, more experience in general with the language. What I steared clear of: - Using crates. Everything just uses the standard library. - "Clever" or "functional" code (for the most part). I guess my code is very "C-like". It's what I'm used to, it's how my brain works. I cannot make peace with super-concise code that crams a ton of meaning into just a few bytes. Some people love that -- I find it very hard to read. I'm still not sure if I really want to use Rust in my real-life projects. I'm very ambivalent about this language. Still, with every line of Rust code that I write, I understand it a little bit better, and maybe, one day, I can form an informed opinion. Merry Christmas.