mod model; mod parsing; use aoc_runner_derive::{aoc, aoc_generator}; pub use model::Grid; pub use parsing::parse_grid; use yap::IntoTokens; #[aoc_generator(day15)] pub fn parse_input(input: &str) -> Grid { let grid = parse_grid(&mut input.into_tokens()).unwrap(); Grid { grid } } #[aoc(day15, part1)] pub fn part1(input: &Grid) -> usize { input.dijkstra((0, 0), (input.grid[0].len() - 1, input.grid.len() - 1)) } #[aoc(day15, part2)] pub fn part2(input: &Grid) -> usize { let input = input.grow(); input.dijkstra((0, 0), (input.grid[0].len() - 1, input.grid.len() - 1)) } #[cfg(test)] mod test { const EXAMPLE_INPUT: &str = "1163751742 1381373672 2136511328 3694931569 7463417111 1319128137 1359912421 3125421639 1293138521 2311944581"; const RESULT_PART_1: usize = 40; const RESULT_PART_2: usize = 315; #[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() { super::parse_input(EXAMPLE_INPUT); } }