Advent of code solutions
Author: Martijn Pieters
Twitter: @zopatista
GitHub: mjpieters
These are my Advent of Code (AoC) puzzle solutions.
All solutions use Python 3.8, and are presented in Jupyter notebooks for easy viewing on GitHub or the online Jupyter notebook viewer.
I don't aim to be first on any leaderboard. I aim to have fun solving the coding puzzles and playing with the concepts, and I try to include explanations of my thinking in the notebooks. Sometimes that means I'll include an animation or graph to show off some aspect of the puzzle.
Running locally
Everything here is run through Jupyter notebooks. If you check out this repository locally everything is included to recreate my environment.
I use Pipenv to manage dependencies, make sure you have it installed before continuing. Once installed, run
$ pipenv install
$ ./start
and the jupyter notebook interface is automatically opened in your default browser. You can stop the server with the Quit button in the web interface, or with the ./stop
script.
Everything is organised in per-year folders.
Additional dependencies
-
Animations are produced using matplotlib's animation API, which requires ffmpeg to be installed. On Mac OS X just use
brew install ffmpeg
. -
Graphs are plotted using graphviz command-line tools such as
dot
,neato
, andtred
. On Mac OS X, just usebrew install graphviz
.
Puzzle input data
I use Wim Glenn's advent-of-code-data
package to load data directly from the AoC website. This library requires your AoC session cookie. You'll have create your own Advent of Code account, then use your browser development tools to retrieve the session cookie value. Store the value according to the advent-of-code-data
instructions (either in ~/.config/aocd/token
or in the AOC_SESSION
environment variable).
Since this project uses Pipenv, I store it in a .env
file in the root directory of this project:
AOC_SESSION=deadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeafdeadbeaf
Do make sure to restart the jupyter notebook server after updating this file.
2015 and 2016 solutions
The 2015 and 2016 solutions are not IPython notebooks; they pre-date this repository, but were added later, and have not been updated or tested to work still. These don't use the advent-of-code-data
library either so you need to download inputs manually for these.
They are included purely for completion's sake.
License
See the LICENSE file in the same directory.