$ jj describe -m "Hello, world!"
$ jj describe -m "Hello, world!"
day9, they're getting trickier! This one tempts you to look for a general solution to the problem, but the input has certain rules that make it tractable, whereas the general solution would be nightmarishly complex (or just use a dependency...). Try graphing the points if you get stuck :)
Bragging a little that my data structure worked first try and I didn't have to fix any of it! Rust and clippy caught all the logic errors I made at compile-time, which helped ;)
day8 - ooh, fun! Hope you paid attention to your data structures class, because this one had "union-find" written all over it. Wanted to write my own DS for a change, so I took an extra 45 minutes or so to implement Wikipedia's union-find in Rust instead of `cargo add disjoint-set`.
that's a common misconception that I used to believe as well! It's just because they weren't very good at making glass flat back then :)
en.wikipedia.org/wiki/Glass#R...
I don't start the puzzles right as they drop, to avoid a sense of time crunch - it's recreational for me, and I'm more interested with finding satisfying solutions than being the fastest. I'm still doing the puzzles on the night they open, because they're fun and I look forward to solving them!
day7 -- only took me 5 minutes to convert my part1 into a clean part2, pretty happy with that. I was primed for this kind of problem by doing 2024d10 earlier today, though, haha
Got a nice day2 solution that doesn't convert any integers to strings; took me from ~2.1s to ~0.35s, unoptimized. I feel like there's probably an elegant analytic solution out there, but if it exists I'm sure it's devilish. I'm happy with this so far.
I like the chill approach Advent of Code 2025 is taking, I was never that into the leaderboards and 12 puzzles is enough for me :)
Doing it in Rust as always, but this year I'm using jujutsu, @tangled.org, and Nix flakes as the supporting cast.
tangled.org/nove.dev/aoc...
It is time for the annual State of Rust Survey! ๐โจ๏ธ๏ธ
Whether you've just begun using Rust, are an experienced Rust user, stopped using Rust, or might use Rust in the future, we'd like to hear from you! ๐ฆ
Available in ten languages and open until December 17th: blog.rust-lang.org/2025/11/17/l...
tangled spindles have been pretty good to me. nixpkgs-based environment definitions are cool, if you're ok with alpha-tier software pushing unannounced breaking changes
don't forget to take the state of html survey y'all!
survey.devographics.com/survey/state...
kagi helps, a little
help.kagi.com/kagi/feature...
typescript types
NixOS
Fish ships with completions for most programs I use: github.com/fish-shell/f.... If it's not there, you can either use fishshell.com/docs/current... to write your own or copy a .fish file to ~/.config/fish/completions from someone online that's done it for you.
IME switching from zsh to fish was quite easy. All the pain points in zsh that you have to fix with plugins and prompts are just solved by default in fish. Sometimes fish's non-posix nature causes hiccups, but the "fish way" is always much better than the posix shell norm.
Nix documentation is really the weakest point of the language/package manager/distribution. Rust's borrow checker is pretty hard to wrap your head around as a newbie as well, but the Rust book is such an excellent resource that it almost doesn't feel hard.
I've been running nixos as my primary wsl distro for a month or so now, it works quite well for me.
related for sure - the interaction combinator paper builds off of interaction nets. can't say how closely the details hew to each other. I remember reading about HVM a year ago or so, it's another interesting project. I imagine IVM (the runtime for Vine) does, or could, take inspiration from HVM.
-- well, theoretical in terms of interaction nets. (I should really finish off my jlox interpreter one of these days.) I'd probably be fine up until the parsing completed.
I also really like how IO is just an argument passed to main(). I do wonder how their "all IO is async, no extra syntax or monad malarkey required, trust us" or default mutable references work in practice, but I do not yet have the theoretical understanding to learn about Vine's compiler internals.
The language, especially syntax, is heavily inspired by Rust (which is also the implementation language), with some of the sharp edges smoothed off. Start at vine.dev/docs/feature..., but make sure you read at least until vine.dev/docs/feature....
reading the vine.dev docs reminds me of my first forays into Haskell - brain melting, but some very interesting ideas in there coming from the alternate model of computation the language is based off (Vine : interaction nets :: Haskell : lambda calculus, kinda).