I built a small Python CLI and library called “elf” based on the workflow I have used for Advent of Code over the past few years. It automates common AoC tasks and provides a typed API for scripting.
Features:
• Cached puzzle input fetching
• Safe answer submission with guardrails and guess history
• Private leaderboard retrieval (table, JSON, or typed models)
• Cross-platform support (macOS, Linux, Windows)
• Built with Typer, Rich, httpx, and Pydantic
PyPI: https://pypi.org/project/elf
Feedback is welcome.
Please review the about page rules on self promotion:
Self-promotion: It's great to have authors participate in the community, but not to exploit it as a write-only tool for product announcements or driving traffic to their work. As a rule of thumb, self-promo should be less than a quarter of one's stories and comments.
Happy to answer questions about design choices or implementation details. Also open to feedback on the API or CLI ergonomics.
There was no title, so I made one.
It's 12 days / 12 puzzles this year, which feels like a nice change of pace. https://adventofcode.com/2025/about#faq_num_days
The pace remains the same; it’s a shorter distance.
Crazy that Eric managed to keep creating the AoC at such a high quality. The Reddit community is also very helpful, everyone's sharing tips and tricks, code golfs, crazy solutions with like Excel or very old assembly or like, Scratch. It's just nice to see.
The way it's being done this year—without the leaderboard and the grind of 24 days of challenges—has piqued my interest. I enjoyed doing the puzzles previously but it just ended up feeling like too much pressure (I know I can technically stop whenever I want, but still) so I might actually do it again this year.
I might actually do it this year! I avoided it because I hate this kind of competitive thing, but I enjoy puzzles. No leaderboard sounds fun. You still need an account though.
The account is needed to ensure your answers are matched to the input you get[1]. You can display an anonymous label as your username, though.
[1] the creator generates a large but finite number of inputs for each puzzle, which are distributed to users. That way you can't "cheat" by just grabbing someone's answer online and submitting it.
Yup, that's the bit I really don't care about. I don't need external validation, I want to do this kind of thing purely for fun. It would be nice if one of the test vectors could be made public and the rest used for the people who care about the rankings and comparisons.
There is a public mini test in the question though.
I kinda like it being the way it is. But each to their own i guess.
the mini test typically doesn't capture all the edge cases. I wrote a solution for day 1 part 2 that passed the mini case but not the big one, and in the past that's been a semi-often occurrence
You can also do puzzles from the previous several years. That's great if you don't care about the competitive side (I don't either), and you can dig into them as time allows.
I have almost a full season's backlog from 2022 onwards.
Oh, yay! That's my Christmas sorted.
Done a few years in TypeScript and others in Zig. I'll try Rust this year and see if it finally sticks. Tried twice to learn Rust and I bounced off. I'm curious to see the difficulty curve this year with only 12 days. No "AI" help of course, never understood why anyone would bother using LLMs for AoC (or anything), but each to their own!
Earlier this year I completed 7 years worth of AoC to learn Rust and found LLMs mildly helpful in expanding and explaining
rust-analyzererrors, particularly over ownership rules. I think that spared me from a bunch of frustration, and after enough repetition, I found that I don't need that crutch at all anymore.I found it rather useful two years ago when I did AOC to learn Clojure. LLM was prompted to not provide direct answers but just explain potential errors, help with discovery of standard library functions and guide towards a solution if I had absolutely no idea how to proceed. It was quite fun.
Of course running an LLM to one-shot a solution is pointless, I agree.
I'll do it again in Common Lisp :) The fast development cycle is perfect for these puzzles. Also, there's always a new library or a new approach to try. Use FSet, with or without CLOS, with or without loop, use Coalton, a grammar generator, etc.
I give a few tips and 3 annotated exercises for newcomers here: https://lisp-journey.gitlab.io/blog/practice-for-advent-of-code-in-common-lisp/
In CL: https://github.com/fosskers/aoc-2025
Thank god for Parcom and Transducers :P
that's nice, and yet another very different to do it, oh my.
Psyched myself up into doing it in Lean 4 while standing on my head and with a dvorak keyboard but life has happened and I will probably end up just doing it in Rust again. Will there be another lobsters irc aoc channel this year?
The channel is
#lobsters-adventon Libera as usual.OH, great idea with Lean. Was thinking of not joining this year but I've been wanting to learn Lean for a good while. You may have convinced me!
This means it's time for my annual return to IRC :-)
Is anyone doing a private leaderboard they'd like to share here?
Trying to do it in Lean this year.
I am planning to do the same. One problem I found though (as a first time Lean user), is that when I search for ways to do something, I can often find tons of information on how to do it in a theorem proving context, which doesn't help me since I am using Lean as a general programming language.
Still managed to solve day 1's puzzle, though.
You're doing better than I am. I'm going to plagiarize another Lean participant for the initial code since I took too long a Haskel hiatus and now can't remember how to extract Typoe from IO Typo, and port my solutions to Lean later (Python & Verus so far)
I’m split between Lean and following through my last years plan (Address Programming Language)
I'd love to hear how that goes iff you decide to write it up.
Brushing up on how to move things around once they're tagged IO. It's been a while since I last coded in the Haskel family, in which Lean is to be found. Once I get past that hurdle I think I should be able to shoot through AOC. My procedure is first Python, then Lean (or Verified Rust)
Going to solve the problems on Janet this year :)
Nice! But why aren't puzzles released every other day? Seems a little anti-climactic for the event to end 12 days before Christmas.
I think it's because both the creator and many participants felt that AoC was intruding too much into the actual social parts of Christmas which tend to bunch up the closer to Christmas day you come. This was definitely the case for me, as the days mounted, I accumulated more and more unsolved problems and also had to deal with the general level of difficulty ramping up.
Not sure if I can pull it off this year, but today's puzzle is perfect for trying with Verus (Verified Rust)