58 lines
1.2 KiB
Rust
58 lines
1.2 KiB
Rust
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);
|
|
}
|
|
}
|