solutions/rust/readme.md
# Advent of Code Rust Solutions
## [2023](https://adventofcode.com/2023/)
[![2023 Rust Progress](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/AlexAegis/advent-of-code/master/.github/badges/rust/2023.json)](/solutions/rust/2023/)
<!-- markdownlint-disable MD013 -->
| Day | Part One | Part Two |
| ------ | -------- | -------- |
| Day 1 | - | - |
| Day 2 | - | - |
| Day 3 | - | - |
| Day 4 | - | - |
| Day 5 | - | - |
| Day 6 | - | - |
| Day 7 | - | - |
| Day 8 | - | - |
| Day 9 | - | - |
| Day 10 | - | - |
| Day 11 | - | - |
| Day 12 | - | - |
| Day 13 | - | - |
| Day 14 | - | - |
| Day 15 | - | - |
| Day 16 | - | - |
| Day 17 | - | - |
| Day 18 | - | - |
| Day 19 | - | - |
| Day 20 | - | - |
| Day 21 | - | - |
| Day 22 | - | - |
| Day 23 | - | - |
| Day 24 | - | - |
| Day 25 | - | - |
<!-- markdownlint-enable MD013 -->
## [2022](https://adventofcode.com/2022/)
[![2022 Rust Progress](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/AlexAegis/advent-of-code/master/.github/badges/rust/2022.json)](/solutions/rust/2022/)
<!-- markdownlint-disable MD013 -->
| Day | Part One | Part Two |
| ------ | -------- | -------- |
| Day 1 | - | - |
| Day 2 | - | - |
| Day 3 | - | - |
| Day 4 | - | - |
| Day 5 | - | - |
| Day 6 | - | - |
| Day 7 | - | - |
| Day 8 | - | - |
| Day 9 | - | - |
| Day 10 | - | - |
| Day 11 | - | - |
| Day 12 | - | - |
| Day 13 | - | - |
| Day 14 | - | - |
| Day 15 | - | - |
| Day 16 | - | - |
| Day 17 | - | - |
| Day 18 | - | - |
| Day 19 | - | - |
| Day 20 | - | - |
| Day 21 | - | - |
| Day 22 | - | - |
| Day 23 | - | - |
| Day 24 | - | - |
| Day 25 | - | - |
<!-- markdownlint-enable MD013 -->
## [2021](https://adventofcode.com/2021/)
[![2021 Rust Progress](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/AlexAegis/advent-of-code/master/.github/badges/rust/2021.json)](/solutions/rust/2021/)
<!-- markdownlint-disable MD013 -->
| Day | Part One | Part Two |
| ------ | -------- | -------- |
| Day 1 | - | - |
| Day 2 | - | - |
| Day 3 | - | - |
| Day 4 | - | - |
| Day 5 | - | - |
| Day 6 | - | - |
| Day 7 | - | - |
| Day 8 | - | - |
| Day 9 | - | - |
| Day 10 | - | - |
| Day 11 | - | - |
| Day 12 | - | - |
| Day 13 | - | - |
| Day 14 | - | - |
| Day 15 | - | - |
| Day 16 | - | - |
| Day 17 | - | - |
| Day 18 | - | - |
| Day 19 | - | - |
| Day 20 | - | - |
| Day 21 | - | - |
| Day 22 | - | - |
| Day 23 | - | - |
| Day 24 | - | - |
| Day 25 | - | - |
<!-- markdownlint-enable MD013 -->
## [2020](https://adventofcode.com/2020/)
[![2020 Rust Progress](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/AlexAegis/advent-of-code/master/.github/badges/rust/2020.json)](/solutions/rust/2020/)
<!-- markdownlint-disable MD013 -->
| Day | Part One | Part Two |
| ---------------------------------- | -------- | -------- |
| [Day 1](/solutions/rust/2020/01/) | - | - |
| [Day 2](/solutions/rust/2020/02/) | - | - |
| [Day 3](/solutions/rust/2020/03/) | - | - |
| [Day 4](/solutions/rust/2020/04/) | - | - |
| [Day 5](/solutions/rust/2020/05/) | - | - |
| [Day 6](/solutions/rust/2020/06/) | - | - |
| [Day 7](/solutions/rust/2020/07/) | - | - |
| [Day 8](/solutions/rust/2020/08/) | - | - |
| [Day 9](/solutions/rust/2020/09/) | - | - |
| [Day 10](/solutions/rust/2020/10/) | - | - |
| [Day 11](/solutions/rust/2020/11/) | - | - |
| [Day 12](/solutions/rust/2020/12/) | - | - |
| [Day 13](/solutions/rust/2020/13/) | - | - |
| [Day 14](/solutions/rust/2020/14/) | - | - |
| [Day 15](/solutions/rust/2020/15/) | - | - |
| [Day 16](/solutions/rust/2020/16/) | - | - |
| [Day 17](/solutions/rust/2020/17/) | - | - |
| [Day 18](/solutions/rust/2020/18/) | - | - |
| [Day 19](/solutions/rust/2020/19/) | - | - |
| [Day 20](/solutions/rust/2020/20/) | - | - |
| [Day 21](/solutions/rust/2020/21/) | - | - |
| [Day 22](/solutions/rust/2020/22/) | - | - |
| [Day 23](/solutions/rust/2020/23/) | - | - |
| [Day 24](/solutions/rust/2020/24/) | - | - |
| [Day 25](/solutions/rust/2020/25/) | - | - |
<!-- markdownlint-enable MD013 -->
## [2019](https://adventofcode.com/2019/)
[![2019 Rust Progress](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/AlexAegis/advent-of-code/master/.github/badges/rust/2019.json)](/solutions/rust/2019/)
<!-- markdownlint-disable MD013 -->
| Day | Part One | Part Two |
| ---------------------------------- | --------------------------------------------- | --------------------------------------------- |
| [Day 1](/solutions/rust/2019/01/) | [1.6μs\*](/solutions/rust/2019/01/src/lib.rs) | [3.6μs\*](/solutions/rust/2019/01/src/lib.rs) |
| [Day 2](/solutions/rust/2019/02/) | [2.2μs\*](/solutions/rust/2019/02/src/lib.rs) | [1ms\*](/solutions/rust/2019/02/src/lib.rs) |
| [Day 3](/solutions/rust/2019/03/) | - | - |
| [Day 4](/solutions/rust/2019/04/) | - | - |
| [Day 5](/solutions/rust/2019/05/) | - | - |
| [Day 6](/solutions/rust/2019/06/) | - | - |
| [Day 7](/solutions/rust/2019/07/) | - | - |
| [Day 8](/solutions/rust/2019/08/) | - | - |
| [Day 9](/solutions/rust/2019/09/) | - | - |
| [Day 10](/solutions/rust/2019/10/) | - | - |
| [Day 11](/solutions/rust/2019/11/) | - | - |
| [Day 12](/solutions/rust/2019/12/) | - | - |
| [Day 13](/solutions/rust/2019/13/) | - | - |
| [Day 14](/solutions/rust/2019/14/) | - | - |
| [Day 15](/solutions/rust/2019/15/) | - | - |
| [Day 16](/solutions/rust/2019/16/) | - | - |
| [Day 17](/solutions/rust/2019/17/) | - | - |
| [Day 18](/solutions/rust/2019/18/) | - | - |
| [Day 19](/solutions/rust/2019/19/) | - | - |
| [Day 20](/solutions/rust/2019/20/) | - | - |
| [Day 21](/solutions/rust/2019/21/) | - | - |
| [Day 22](/solutions/rust/2019/22/) | - | - |
| [Day 23](/solutions/rust/2019/23/) | - | - |
| [Day 24](/solutions/rust/2019/24/) | - | - |
| Day 25 | - | - |
<!-- markdownlint-enable MD013 -->
## [2018](https://adventofcode.com/2018/)
[![2018 Rust Progress](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/AlexAegis/advent-of-code/master/.github/badges/rust/2018.json)](/solutions/rust/2018/)
<!-- markdownlint-disable MD013 -->
| Day | Part One | Part Two |
| ---------------------------------- | ------------------------------------------ | -------------------------------------------- |
| [Day 1](/solutions/rust/2018/01/) | [13μs](/solutions/rust/2018/01/src/lib.rs) | [12.2μs](/solutions/rust/2018/01/src/lib.rs) |
| [Day 2](/solutions/rust/2018/02/) | - | - |
| [Day 3](/solutions/rust/2018/03/) | - | - |
| [Day 4](/solutions/rust/2018/04/) | - | - |
| [Day 5](/solutions/rust/2018/05/) | - | - |
| [Day 6](/solutions/rust/2018/06/) | - | - |
| [Day 7](/solutions/rust/2018/07/) | - | - |
| [Day 8](/solutions/rust/2018/08/) | - | - |
| [Day 9](/solutions/rust/2018/09/) | - | - |
| [Day 10](/solutions/rust/2018/10/) | - | - |
| [Day 11](/solutions/rust/2018/11/) | - | - |
| [Day 12](/solutions/rust/2018/12/) | - | - |
| [Day 13](/solutions/rust/2018/13/) | - | - |
| [Day 14](/solutions/rust/2018/14/) | - | - |
| [Day 15](/solutions/rust/2018/15/) | - | - |
| Day 16 | - | - |
| Day 17 | - | - |
| Day 18 | - | - |
| Day 19 | - | - |
| Day 20 | - | - |
| Day 21 | - | - |
| Day 22 | - | - |
| Day 23 | - | - |
| Day 24 | - | - |
| Day 25 | - | - |
<!-- markdownlint-enable MD013 -->
## [2017](https://adventofcode.com/2017/)
[![2017 Rust Progress](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/AlexAegis/advent-of-code/master/.github/badges/rust/2017.json)](/solutions/typescript/2017/)
<!-- markdownlint-disable MD013 -->
| Day | Part One | Part Two |
| --------------------------------- | -------------------------------------------- | -------------------------------------------- |
| [Day 1](/solutions/rust/2017/01/) | [51μs\*](/solutions/rust/2017/01/src/lib.rs) | [59μs\*](/solutions/rust/2017/01/src/lib.rs) |
| Day 2 | - | - |
| Day 3 | - | - |
| Day 4 | - | - |
| Day 5 | - | - |
| Day 6 | - | - |
| Day 7 | - | - |
| Day 8 | - | - |
| Day 9 | - | - |
| Day 10 | - | - |
| Day 11 | - | - |
| Day 12 | - | - |
| Day 13 | - | - |
| Day 14 | - | - |
| Day 15 | - | - |
| Day 16 | - | - |
| Day 17 | - | - |
| Day 18 | - | - |
| Day 19 | - | - |
| Day 20 | - | - |
| Day 21 | - | - |
| Day 22 | - | - |
| Day 23 | - | - |
| Day 24 | - | - |
| Day 25 | - | - |
## [2016](https://adventofcode.com/2016/)
[![2016 Rust Progress](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/AlexAegis/advent-of-code/master/.github/badges/rust/2016.json)](/solutions/rust/2016/)
<!-- markdownlint-disable MD013 -->
| Day | Part One | Part Two |
| --------------------------------- | -------- | -------- |
| [Day 1](/solutions/rust/2016/01/) | - | - |
| [Day 2](/solutions/rust/2016/02/) | - | - |
| Day 3 | - | - |
| Day 4 | - | - |
| Day 5 | - | - |
| Day 6 | - | - |
| Day 7 | - | - |
| Day 8 | - | - |
| Day 9 | - | - |
| Day 10 | - | - |
| Day 11 | - | - |
| Day 12 | - | - |
| Day 13 | - | - |
| Day 14 | - | - |
| Day 15 | - | - |
| Day 16 | - | - |
| Day 17 | - | - |
| Day 18 | - | - |
| Day 19 | - | - |
| Day 20 | - | - |
| Day 21 | - | - |
| Day 22 | - | - |
| Day 23 | - | - |
| Day 24 | - | - |
| Day 25 | - | - |
<!-- markdownlint-enable MD013 -->
## [2015](https://adventofcode.com/2015/)
[![2015 Rust Progress](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/AlexAegis/advent-of-code/master/.github/badges/rust/2015.json)](/solutions/rust/2015/)
<!-- markdownlint-disable MD013 -->
| Day | Part One | Part Two |
| --------------------------------- | --------------------------------------------- | --------------------------------------------- |
| [Day 1](/solutions/rust/2015/01/) | [6.2μs\*](/solutions/rust/2015/01/src/lib.rs) | [1.9μs\*](/solutions/rust/2015/01/src/lib.rs) |
| [Day 2](/solutions/rust/2015/02/) | [194μs\*](/solutions/rust/2015/02/src/lib.rs) | [196μs\*](/solutions/rust/2015/02/src/lib.rs) |
| [Day 3](/solutions/rust/2015/03/) | [231μs\*](/solutions/rust/2015/03/src/lib.rs) | [256μs\*](/solutions/rust/2015/03/src/lib.rs) |
| [Day 4](/solutions/rust/2015/04/) | [506ms](/solutions/rust/2015/04/src/lib.rs) | [14s](/solutions/rust/2015/04/src/lib.rs) |
| [Day 5](/solutions/rust/2015/05/) | [193μs](/solutions/rust/2015/05/src/lib.rs) | [4ms](/solutions/rust/2015/05/src/lib.rs) |
| Day 6 | - | - |
| Day 7 | - | - |
| Day 8 | - | - |
| Day 9 | - | - |
| Day 10 | - | - |
| Day 11 | - | - |
| Day 12 | - | - |
| Day 13 | - | - |
| Day 14 | - | - |
| Day 15 | - | - |
| Day 16 | - | - |
| Day 17 | - | - |
| Day 18 | - | - |
| Day 19 | - | - |
| Day 20 | - | - |
| Day 21 | - | - |
| Day 22 | - | - |
| Day 23 | - | - |
| Day 24 | - | - |
| Day 25 | - | - |
<!-- markdownlint-enable MD013 -->
## Setup
1. Install [Rust](https://www.rust-lang.org/tools/install)
2. Open with [VS Code](https://code.visualstudio.com/)
3. Install the suggested extensions when prompted (Recommended)
4. Install the required crates
```sh
cargo build
```
> Select `Current Rust Cargo` launch option. **F5** runs the cargo you're
> focusing in debug mode. Set Rust to default to `nightly`
```sh
rustup default nightly
```
### Debug
> Since CodeLLDB does not play well with cargo workspaces use the `Debug` or
> `Run` codelense from the `rust-analyser` VS Code extension
### Running individual days
```sh
cargo run -p aoc201601
```
### Testing
Run in the cargo you'd like to test
```sh
cargo test
```
Or in the workspace cargo if you'd like to run all tests
```sh
cargo test --all
```
### Benchmarking
Run a specific days benchmark
```sh
cargo bench -p aoc201501
```
Or in the workspace cargo if you'd like to run all benchmarks (Takes a while!)
```sh
cargo bench --all
```
## Scaffolding
```sh
cargo run -p scaffold 2016 01
```
## Requirements
- OpenSSL dev libraries
To install on Ubuntu:
```sh
sudo apt install libssl-dev pkg-config
```
## Notes
Rustfmt's config file is symlinked to the repository root because the
[rust-analyser extension can't pick it up otherwise.](https://github.com/rust-analyzer/rust-analyzer/issues/7227)
The github action `actions-rs/cargo@v1`
[cannot be run in a subdirectory either](https://github.com/actions-rs/cargo/issues/86)
so `--manifest-path` has to be set for each step.
The github action `actions-rs/audit-check@v1` is disabled because it too cannot
be run in a subdirectory but additional argument cannot be passed
[until this pr is merged](https://github.com/actions-rs/audit-check/pull/133).
Until that, this step is done manually.