I just extracted the boilerplate management code that I used to work with in previous years:
It is yet another generic input downloader (with cache), solution module generator, test generator, and commands to work with any year/day combination, promoting TDD practices.
If you have your own boilerplate or helper code, post it below, people may be interested.
I decided to roll my own AoC framework/helper this year but started a day too late. I’m still trying to polish it up but pleased with it so far. I’ll try to remember to post it here once it’s done. I’m curious about how people feel about configuration for this sort of tool. I’m setting it up for myself so it’s getting the session cookie from a hard coded ENV variable and the default paths are non-configurable (though passing non-default paths is available at runtime). Is this how most people do it or would it be better to have config options setup for everything?
Well a variable or two for path prefixes with sane defaults are not hard to setup.
But few people will use our tools, maybe nobody will ; there is no need for fully configurable stuff here, it’s not like a genral purpose application framework.
I do some of the days in Rust and I use a boilerplate, I don’t really care where the files are, I just do what the README tells me because I just want to solve the problems. The “app” does not need to be deployed somewhere, it just needs to compile and be called from the console.
I’ve added more helpers and documentation for my Advent Of Code library.
It’s still just a bunch of helpers to ease fetching and caching inputs, and generate boilerplate code and tests.
But I also updated the README file to be a comprehensive guide on how to use it and solve your first AoC puzzle. This is intended for Elixir beginners and/or AoC beginners.
For more seasoned alchemist elves, I still think the library adds value (I made it for myself after all). There is a TL;DR section in the README and a documentation for all the available commands.
Tell me if you find that useful, and if you have any idea to improve it!
One suggestion: trim: true in Input.stream/2 should be default. wdyt?
edit: Also question, how to have multiple days in .aoc.defaults? I made a PR for each day and now I’m merging day 2 but the files conflict, how do I resolve this? Maybe I should just git ignore it.
I am not sure trimming would be the default. The Input module should be as close as possible to File.stream! because without this library you can just call File.stream! on your input path and it should work as normal. There is a lot of puzzles where blank lines and indentation are meaningful, so discarding them by default does not seem a good idea to me.
Yeah you should just ignore that file. But I wonder why you use it anyway. I am not sure if the docs are clear enough but the aoc.set command is intended for working on another year, or extending your work on some day when you are not finished in time.
If you just remove the defaults file, the commands will pull the input for the current day, and generate the code for the current day as well.
I used to have trim as default, but then I remember once hitting wrong answer because trim parsed the input wrong. And it never occurred to me it could be trim that’s causing it.