Solutions for Advent of Code in Rust.
All solutions marked with ⭐ run in under 1ms in release mode (on my machine, your experience may vary). Solutions marked ✨ take longer than that.
Day | Part 1 | Part 2 |
---|---|---|
Day 1 | ⭐ | ⭐ |
Day 2 | ⭐ | ⭐ |
Day 3 | ⭐ | ⭐ |
Day 4 | ⭐ | ⭐ |
Day 5 | ⭐ | ⭐ |
Day 6 | ⭐ | ⭐ |
Day 7 | ⭐ | ⭐ |
Day 8 | ⭐ | ⭐ |
Day 9 | ⭐ | ⭐ |
Day 10 | ⭐ | ⭐ |
Day 11 | ⭐ | ✨ 1.1 ms |
Day 12 | ✨ 24 ms | ✨ 22 ms |
Day 13 | ⭐ | ⭐ |
Day 14 | ⭐ | ✨ 2.9 ms |
Day 15 | ⭐ | ✨ 20 ms |
Day 16 | ||
Day 17 | ||
Day 18 | ⭐ | ✨ 1.9 ms |
Day 19 | ||
Day 20 | ✨ 40 ms | ✨ 645 ms |
Day 21 | ⭐ | ✨ 25 ms |
Day 22 | ⭐ | |
Day 23 | ✨ 4.8 ms | ✨ 575 ms |
Day 24 | ||
Day 25 | ✨ 12 ms |
# example: `cargo scaffold 1`
cargo scaffold <day>
# output:
# Created module "src/bin/01.rs"
# Created empty input file "src/inputs/01.txt"
# Created empty example file "src/examples/01.txt"
# ---
# 🎄 Type `cargo solve 01` to run your solution.
Individual solutions live in the ./src/bin/
directory as separate binaries.
Every solution has unit tests referencing its example file. I yse these unit tests to develop and debug my solution against the example input.
Note
This command requires installing the aoc-cli crate.
# example: `cargo download 1`
cargo download <day>
# output:
# Downloading input with aoc-cli...
# Loaded session cookie from "/home/felix/.adventofcode.session".
# Downloading input for day 1, 2022...
# Saving puzzle input to "/tmp/tmp.MBdcAdL9Iw/input"...
# Done!
# ---
# 🎄 Successfully wrote input to "src/inputs/01.txt"!
To download inputs for previous years, append the --year/-y
flag. (example: cargo download 1 --year 2020
)
Puzzle inputs are not checked into git. Reasoning.
# example: `cargo solve 01`
cargo solve <day>
# output:
# Running `target/debug/01`
# 🎄 Part 1 🎄
#
# 6 (elapsed: 37.03µs)
#
# 🎄 Part 2 🎄
#
# 9 (elapsed: 33.18µs)
solve
is an alias for cargo run --bin
. To run an optimized version for benchmarking, append the --release
flag.
Displayed timings show the raw execution time of the solution without overhead (e.g. file reads).
cargo all
# output:
# Running `target/release/advent_of_code`
# ----------
# | Day 01 |
# ----------
# 🎄 Part 1 🎄
#
# 0 (elapsed: 170.00µs)
#
# 🎄 Part 2 🎄
#
# 0 (elapsed: 30.00µs)
# <...other days...>
# Total: 0.20ms
all
is an alias for cargo run
. To run an optimized version for benchmarking, use the --release
flag.
Total timing is computed from individual solution timings and excludes as much overhead as possible.
cargo test
To run tests for a specific day, append --bin <day>
, e.g. cargo test --bin 01
. You can further scope it down to a specific part, e.g. cargo test --bin 01 part_one
.
cargo fmt
cargo clippy