New Dec 12, 2025

Wrapping up Advent of Code 2025

More Front-end Bloggers All from dbushell.com (blog) View Wrapping up Advent of Code 2025 on dbushell.com

I wrote about Advent of Code in January and I was keen to return for AoC 2025. This year I upped my game by attempting all puzzles in JavaScript, Zig, and Rust. I had plenty of time due to a work project falling through… Oh well, time to brute force some puzzles!

Visit my git forge to find my solution source code.

Daily Notes

To track my progress I wrote daily notes.

AoC 2025

AoC changed to 12 days this year. The last ten years were a full 24 day advent calendar. I’m happy with that change. Although there is no time limit, I enjoy doing daily puzzles and following the memes and zeitgeist on Reddit and Ziggit. 24 is way too tiring! Not going to lie though, I’m still exhausted trying to keep up!

I completed all puzzles in JavaScript first. Day 1 through 5 felt like a warm up. Day 6 was a novel change of pace. Day 7 started heating up and day 8 was my first performance pit. From there onwards every day was an optimisation party. Day 9 took a long time. Day 10 part 2 I did not enjoy. Day 11 was most satisfying to solve. Day 12 was a real brain teaser.

I had fun, but what did I learn?

JavaScript

I write JavaScript every day, so I’m somewhat of an expert, but I did learn more about bitwise operations. JavaScript bitwise is limited to 32-bit integers. So if you’re trying to pack boolean flags into a number the limit is 32 pieces of data. BigInt comes to the rescue. I don’t know the BigInt limit but it’s many orders of magnitude more. This technique wasn’t strictly necessary in the end I just used it to flex.

Zig

The last Zig I wrote was for my blog static search back in May. The nice thing about Zig is that it’s simple with a relatively small standard library. Zig’s move to an unmanaged allocator pattern led me to make better use of ArenaAllocator. The Zig compiler and DebugAllocator provide excellent support for learning good memory management.

Rust

I’ve struggled to learn Rust twice before. I deemed myself too stupid. The Rust syntax and standard library is a little overwhelming for me. This fact combined with difficulty understanding the borrow checker meant Rust never stuck in my brain.

For AoC I decided to give Rust one last go. At first I simply translated my JavaScript and Zig code slowly and methodically. I keep re-reading the ownership chapter and I think I finally understand now!

Rust syntax is weird with too much sugar but no parenthesis around conditions. Lifetime annotations are downright ugly. The Rc and Arc shared ownership stuff is a joyless chore. Despite disliking much of the language, I’m starting to appreciate the core memory safe principle a lot more. Rust also allows for remarkably terse code. Especially compared to the verbosity of Zig. It’s cool.

Is Rust for me? Probably not. My career is in front-end development, Rust would be yet another side project. I just don’t have time or headspace for it. I feel like I’m progressing quicker with Zig as my low-level compiled language of choice. Zig can easily compile to Wasm. I know Rust can but it’s a little more involved.

I’m glad I made the effort but I’ll stick to JavaScript next year.

Side note: I started using Zed editor without the slop. It’s a breath of fresh air compared to VSCode(ium). A lot of the same niceties without the sluggishness. (Yes, I’m aware Vim and Emacs are so much faster.)


Join me next week for a final year in review blog! After that I’ll be offline until early January for a much needed break. Merry Christmas!


Thanks for reading! Follow me on Mastodon and Bluesky. Subscribe to my Blog and Notes or Combined feeds.

Scroll to top