aoc-rs-2021/src/day_15/mod.rs
Jan Christian Grünhage 726f629e30 implement day 15
2021-12-16 00:09:04 +01:00

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