From 0000007042a3328adc37e3efdc3a59177b8632a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Jane=C5=BEi=C4=8D?= Date: Wed, 1 Feb 2023 22:09:09 +0100 Subject: [PATCH] solution: day6 --- src/bin/06.rs | 49 +++++++++++++++++++++++++++++++++++++++++++++ src/examples/06.txt | 16 +++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 src/bin/06.rs create mode 100644 src/examples/06.txt diff --git a/src/bin/06.rs b/src/bin/06.rs new file mode 100644 index 0000000000..889f49f --- /dev/null +++ b/src/bin/06.rs @@ -0,0 +1,49 @@ +use hashbrown::HashMap; +use itertools::Itertools; + +fn solve(input: &str, min: bool) -> String { + let mut data: HashMap<_, HashMap<_, _>> = HashMap::new(); + for line in input.lines() { + for (idx, x) in line.chars().enumerate() { + *data.entry(idx).or_default().entry(x).or_insert(0) += 1; + } + } + + if min { + data.iter() + .sorted_by_key(|(k, _)| *k) + .map(|(_, v)| *v.iter().min_by_key(|(_, v)| *v).unwrap().0) + .collect::() + } else { + data.iter() + .sorted_by_key(|(k, _)| *k) + .map(|(_, v)| *v.iter().max_by_key(|(_, v)| *v).unwrap().0) + .collect::() + } +} + +pub fn part_one(input: &str) -> Option { + Some(solve(input, false)) +} +pub fn part_two(input: &str) -> Option { + Some(solve(input, true)) +} +fn main() { + let input = &aoc::read_file("inputs", 6); + aoc::solve!(1, part_one, input); + aoc::solve!(2, part_two, input); +} +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn test_part_one() { + let input = aoc::read_file("examples", 6); + assert_eq!(part_one(&input), Some("easter".to_string())); + } + #[test] + fn test_part_two() { + let input = aoc::read_file("examples", 6); + assert_eq!(part_two(&input), Some("advent".to_string())); + } +} diff --git a/src/examples/06.txt b/src/examples/06.txt new file mode 100644 index 0000000000..32ba518 --- /dev/null +++ b/src/examples/06.txt @@ -0,0 +1,16 @@ +eedadn +drvtee +eandsr +raavrd +atevrs +tsrnev +sdttsa +rasrtv +nssdts +ntnada +svetve +tesnvt +vntsnd +vrdear +dvrsen +enarar