aoc-rs-2021/src/day_10/mod.rs
Jan Christian Grünhage 5eb76e73ca implement day 10
2021-12-10 16:20:53 +01:00

63 lines
1.4 KiB
Rust

mod model;
use aoc_runner_derive::{aoc, aoc_generator};
use itertools::Itertools;
use self::model::Mistake;
#[aoc_generator(day10)]
pub fn parse_input(input: &str) -> Vec<Mistake> {
input.lines().filter_map(model::find_mistake).collect()
}
#[aoc(day10, part1)]
pub fn part1(input: &[Mistake]) -> usize {
input
.iter()
.filter_map(|mistake| mistake.unexpected_char_score())
.sum()
}
#[aoc(day10, part2)]
pub fn part2(input: &[Mistake]) -> usize {
let scores: Vec<usize> = input
.iter()
.filter_map(|mistake| mistake.autocomplete_score())
.sorted()
.collect();
scores[scores.len() / 2]
}
#[cfg(test)]
mod test {
const EXAMPLE_INPUT: &str = "[({(<(())[]>[[{[]{<()<>>
[(()[<>])]({[<{<<[]>>(
{([(<{}[<>[]}>{[]{[(<()>
(((({<>}<{<{<>}{[]{[]{}
[[<[([]))<([[{}[[()]]]
[{[{({}]{}}([{[{{{}}([]
{<[[]]>}<{[{[{[]{()[[[]
[<(<(<(<{}))><([]([]()
<{([([[(<>()){}]>(<<{{
<{([{{}}[<[[[<>{}]]]>[]]";
const RESULT_PART_1: usize = 26397;
const RESULT_PART_2: usize = 288957;
#[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);
}
}