# haskal's advent of code 2020 solutions sharks ## a guide to this repo ### `(pregexp #px"([0-9]+).rkt" (list _ day))` these are the solution files for `day`. some of them have two versions, click on the history button to view both. the first version is the original solution i wrote, and the second version contains some cleanup to make the code nicer. day 1 doesn't have an original version because i didn't commit it. other days may not have a cleaned up version if i didn't think any cleanup needed to be done the code aims to be as efficient as needed, but prioritizes readability and conciseness. i want to create a good demo of using racket and its available features to solve programming problems quickly and cleanly ### `(or "LICENSE" "COPYING")` the license is GPL 3.0 or later, including solutions and scripts ### `"inputs/"` an empty folder, this is where scripts put input files ### `"scripts/aoc-lib.rkt"` this is a collection of functions for interacting with the AoC server to fetch challenges, submit answers, get leaderboards, and track progress (in a local file called `.status.rktd`) scripts expect some environment variables to be present - `AOC_SESSION`: a session token for your account. log in, then copy the `session` cookie - `AOC_YEAR`: the challenge year - `AOC_LEADERBOARD`: your leaderboard ID, used for plot ### `"scripts/aoc.rkt"` this is included by the template and goes into every solution by default. it exports a function to report answers to the challenge server, and useful libraries for challenge code to use ### `"scripts/countdown"` counts down to the next challenge then initializes it from a template, downloads the input file, and displays the challenge text in the terminal ### `"scripts/get-challenge"` a CLI application for viewing challenges. takes 1 argument for day. displays somewhat styled challenge text to the terminal (requires 256color) ### `"scripts/get-input"` downloads the input for day `n` to `inputs/n` ### `"scripts/make-day"` creates a new solution file from template and downloads the input for a given day ### `"scripts/plot"` plots the scores of everyone on a private leaderboard over time, defaults to displaying the plot in a window ### `(or "scripts/plot.scrbl" "scripts/plot.css")` define a webpage (rendered with scribble) to display the plot generated by `scripts/plot`. you can render it with `scribble --dest --style plot.css plot.scrbl` the plot for my leaderboard is available at ### `"scripts/submit-answer"` takes a day, level, and answer and submits it. returns what the server responded ### `"scripts/template.rktrkt"` a template (in scribble) defining the solution code for a day. should be templated with the variable `day` specifying the day