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