aoc2020/README.md

85 lines
2.8 KiB
Markdown

# haskal's advent of code 2020 solutions
sharks
third party packages used so far
- `curly-fn` and `threading`: all
- `graph`: day 7 +
- `brag`: day 19
## 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 <dest> --style plot.css plot.scrbl`
the plot for my leaderboard is available at <https://joan.awoo.systems/aoc2020/>
### `"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