AlexAegis/advent-of-code

View on GitHub
solutions/rust/readme.md

Summary

Maintainability
Test Coverage
# 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.