Skip to main content

aoc/
lib.rs

1//! # Advent of Code solutions in Rust, tuned for speed.
2//!
3//! [![badge]][link]
4//!
5//! [badge]: https://img.shields.io/badge/github-blue?style=for-the-badge&logo=github&labelColor=grey
6//! [link]: https://github.com/maneatingape/advent-of-code-rust
7
8// Portable SIMD API is enabled by "simd" feature.
9#![cfg_attr(feature = "simd", allow(unstable_features), feature(portable_simd))]
10
11/// Enumerates all combinations of years and days, passing them to a callback macro.
12/// Used by `benchmark.rs`, `lib.rs`, `main.rs` and `test.rs`.
13#[macro_export]
14macro_rules! solutions {
15    ($callback:ident) => {
16        $callback! {
17            year2015 "Help Santa by solving puzzles to fix the weather machine's snow function."
18                day01 day02 day03 day04 day05 day06 day07 day08 day09 day10 day11 day12
19                day13 day14 day15 day16 day17 day18 day19 day20 day21 day22 day23 day24 day25,
20
21            year2016 "Defeat the Easter Bunny to save Christmas."
22                day01 day02 day03 day04 day05 day06 day07 day08 day09 day10 day11 day12
23                day13 day14 day15 day16 day17 day18 day19 day20 day21 day22 day23 day24 day25,
24
25            year2017 "A technical support callout from the Elves escalates rapidly."
26                day01 day02 day03 day04 day05 day06 day07 day08 day09 day10 day11 day12
27                day13 day14 day15 day16 day17 day18 day19 day20 day21 day22 day23 day24 day25,
28
29            year2018 "Travel through time to restore the festive timeline."
30                day01 day02 day03 day04 day05 day06 day07 day08 day09 day10 day11 day12
31                day13 day14 day15 day16 day17 day18 day19 day20 day21 day22 day23 day24 day25,
32
33            year2019 "Rescue Santa from deep space with a solar system voyage."
34                day01 day02 day03 day04 day05 day06 day07 day08 day09 day10 day11 day12
35                day13 day14 day15 day16 day17 day18 day19 day20 day21 day22 day23 day24 day25,
36
37            year2020 "What could go wrong trying to enjoy a well-deserved vacation?"
38                day01 day02 day03 day04 day05 day06 day07 day08 day09 day10 day11 day12
39                day13 day14 day15 day16 day17 day18 day19 day20 day21 day22 day23 day24 day25,
40
41            year2021 "Retrieve the keys to Santa's sleigh with an underwater submarine adventure."
42                day01 day02 day03 day04 day05 day06 day07 day08 day09 day10 day11 day12
43                day13 day14 day15 day16 day17 day18 day19 day20 day21 day22 day23 day24 day25,
44
45            year2022 "Assist the Elves on their annual jungle expedition."
46                day01 day02 day03 day04 day05 day06 day07 day08 day09 day10 day11 day12
47                day13 day14 day15 day16 day17 day18 day19 day20 day21 day22 day23 day24 day25,
48
49            year2023 "Restore global snow production with an island hopping odyssey."
50                day01 day02 day03 day04 day05 day06 day07 day08 day09 day10 day11 day12
51                day13 day14 day15 day16 day17 day18 day19 day20 day21 day22 day23 day24 day25,
52
53            year2024 "Locate the Chief Historian in time for the big Christmas sleigh launch."
54                day01 day02 day03 day04 day05 day06 day07 day08 day09 day10 day11 day12
55                day13 day14 day15 day16 day17 day18 day19 day20 day21 day22 day23 day24 day25,
56
57            year2025 "Finish the North Pole decorations in time for Christmas."
58                day01 day02 day03 day04 day05 day06 day07 day08 day09 day10 day11 day12
59        }
60    };
61}
62
63/// Declares a public module for each year documented with its description and containing a
64/// sub-module for each day.
65///
66/// Two interesting things:
67/// * Module declaration is possible via macro.
68/// * Rust allows the day sub-module declarations directly without needing an intermediate `mod.rs`
69///   in each year folder.
70#[macro_export]
71macro_rules! library {
72    ($($year:ident $description:literal $($day:ident)*),*) => {
73        $(pub mod $year {
74            #![doc = concat!("# ", $description)]
75            $(pub mod $day;)*
76        })*
77    }
78}
79
80library!(util "Utility modules to handle common recurring Advent of Code patterns."
81    ansi bitset grid hash heap intcode integer iter math md5 parse point thread
82);
83
84solutions!(library);