64 lines
1.1 KiB
Rust
64 lines
1.1 KiB
Rust
mod model;
|
|
mod parsing;
|
|
|
|
use aoc_runner_derive::{aoc, aoc_generator};
|
|
pub use model::{Cave, CaveSystem};
|
|
pub use parsing::parse_cave_system;
|
|
use yap::IntoTokens;
|
|
|
|
#[aoc_generator(day12)]
|
|
pub fn parse_input(input: &str) -> CaveSystem {
|
|
parse_cave_system(&mut input.into_tokens()).unwrap()
|
|
}
|
|
|
|
#[aoc(day12, part1)]
|
|
pub fn part1(input: &CaveSystem) -> usize {
|
|
input.list_paths(false).len()
|
|
}
|
|
|
|
#[aoc(day12, part2)]
|
|
pub fn part2(input: &CaveSystem) -> usize {
|
|
input.list_paths(true).len()
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod test {
|
|
const EXAMPLE_INPUT: &str = "fs-end
|
|
he-DX
|
|
fs-he
|
|
start-DX
|
|
pj-DX
|
|
end-zg
|
|
zg-sl
|
|
zg-pj
|
|
pj-he
|
|
RW-he
|
|
fs-DX
|
|
pj-RW
|
|
zg-RW
|
|
start-pj
|
|
he-WI
|
|
zg-he
|
|
pj-fs
|
|
start-RW";
|
|
const RESULT_PART_1: usize = 226;
|
|
const RESULT_PART_2: usize = 3509;
|
|
|
|
#[test]
|
|
fn part1_example() {
|
|
let result = super::part1(&super::parse_input(EXAMPLE_INPUT));
|
|
assert_eq!(result, RESULT_PART_1);
|
|
}
|
|
|
|
#[test]
|
|
fn part2_example() {
|
|
let result = super::part2(&super::parse_input(EXAMPLE_INPUT));
|
|
assert_eq!(result, RESULT_PART_2);
|
|
}
|
|
|
|
#[test]
|
|
fn parse_example() {
|
|
let _example = super::parse_input(EXAMPLE_INPUT);
|
|
}
|
|
}
|