From 1cf168ec71b8b091c4acbb1587c71f4de14a7347 Mon Sep 17 00:00:00 2001 From: YK Date: Wed, 20 Nov 2024 00:32:14 +0300 Subject: [PATCH] solution: day 6 --- src/days.rs | 2 +- src/days/d6.rs | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 src/days/d6.rs diff --git a/src/days.rs b/src/days.rs index 4436c45..a44c1c7 100644 --- a/src/days.rs +++ b/src/days.rs @@ -3,7 +3,7 @@ pub mod d2; pub mod d3; pub mod d4; pub mod d5; -// pub mod d6; +pub mod d6; // pub mod d7; // pub mod d8; // pub mod d9; diff --git a/src/days/d6.rs b/src/days/d6.rs new file mode 100644 index 0000000..7b18702 --- /dev/null +++ b/src/days/d6.rs @@ -0,0 +1,55 @@ +use crate::prelude::*; + +pub type I = Vec<&'static str>; +pub type O = String; + +fn _parse (data: &'static str) -> I { + data.lines().collect() +} + +fn _solve (data: &I) -> Vec> { + let mut m: Vec> = vec![M::new(); data[0].len()]; + + for line in data { + for (col, c) in line.chars().enumerate() { + *m[col].entry(c).or_default() += 1; + } + } + + m +} + +fn _silver (data: &I) -> O { + _solve(data).into_iter().map(|v| v.into_iter().max_by_key(|&(_, v)| v).unwrap().0).collect::() +} + +fn _gold (data: &I) -> O { + _solve(data).into_iter().map(|v| v.into_iter().min_by_key(|&(_, v)| v).unwrap().0).collect::() +} + +#[cfg(test)] +mod test { + use super::*; + + fn read () -> I { + let data = inc!(6); + _parse(data) + } + + + #[test] + fn silver () { + let data = read(); + let ans = _silver(&data); + + assert_eq!(ans, s!("gebzfnbt")) + } + + #[test] + fn gold () { + let data = read(); + let ans = _gold(&data); + + assert_eq!(ans, s!("fykjtwyn")) + } +}