85 lines
2.8 KiB
Markdown
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
|