aoc-rs-2021/src/day_09/mod.rs
Jan Christian Grünhage 0416116a65 implement day 9
2021-12-10 08:17:38 +01:00

64 lines
1.3 KiB
Rust

mod model;
mod parsing;
use aoc_runner_derive::{aoc, aoc_generator};
use itertools::Itertools;
pub use model::HeightMap;
pub use parsing::parse_map;
use yap::IntoTokens;
#[aoc_generator(day9)]
pub fn parse_input(input: &str) -> HeightMap {
parse_map(&mut input.into_tokens())
}
#[aoc(day9, part1)]
pub fn part1(input: &HeightMap) -> usize {
input
.get_low_points()
.iter()
.map(|point| input.get_risk_level(*point))
.flatten()
.sum()
}
#[aoc(day9, part2)]
pub fn part2(input: &HeightMap) -> usize {
input
.get_basin_sizes()
.iter()
.sorted()
.rev()
.take(3)
.product()
}
#[cfg(test)]
mod test {
const EXAMPLE_INPUT: &str = "2199943210
3987894921
9856789892
8767896789
9899965678";
const RESULT_PART_1: usize = 15;
const RESULT_PART_2: usize = 1134;
#[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);
//unimplemented!();
}
}