aoc-rs-2021/src/day_12/mod.rs
Jan Christian Grünhage d73485111d implement day 12
2021-12-12 13:00:18 +01:00

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);
}
}