From be167e4b2c10eac49417fb314443f398b226fbfd Mon Sep 17 00:00:00 2001 From: YK Date: Tue, 19 Nov 2024 21:45:46 +0300 Subject: [PATCH] solution: day 3 --- src/days.rs | 2 +- src/days/d3.rs | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 src/days/d3.rs diff --git a/src/days.rs b/src/days.rs index c31753b..0958165 100644 --- a/src/days.rs +++ b/src/days.rs @@ -1,6 +1,6 @@ pub mod d1; pub mod d2; -// pub mod d3; +pub mod d3; // pub mod d4; // pub mod d5; // pub mod d6; diff --git a/src/days/d3.rs b/src/days/d3.rs new file mode 100644 index 0000000..1ecb3c3 --- /dev/null +++ b/src/days/d3.rs @@ -0,0 +1,48 @@ +use crate::prelude::*; + +pub type I = &'static str; +pub type O = usize; + +fn _silver (data: &I) -> O { + data.lines().filter(|line| { + let v = line.trim().split_ascii_whitespace().filter(|part| !part.is_empty()).map(|num| num.trim().parse::().unwrap()).collect_vec(); + + v[0] + v[1] > v[2] && + v[1] + v[2] > v[0] && + v[0] + v[2] > v[1] + }).count() +} + +fn _gold (data: &I) -> O { + let mut counter = 0; + for chunk in &data.lines().chunks(3) { + let v = chunk.map(|line| line.trim().split_ascii_whitespace().filter(|part| !part.is_empty()).map(|num| num.trim().parse::().unwrap()).collect_vec()).collect_vec(); + counter += (0usize..3).into_iter().filter(|&i| v[0][i] + v[1][i] > v[2][i] && v[1][i] + v[2][i] > v[0][i] && v[2][i] + v[0][i] > v[1][i]).count(); + } + counter +} + +#[cfg(test)] +mod test { + use super::*; + + fn read () -> I { + inc!(3) + } + + #[test] + fn silver () { + let data = read(); + let ans = _silver(&data); + + assert_eq!(ans, 993) + } + + #[test] + fn gold () { + let data = read(); + let ans = _gold(&data); + + assert_eq!(ans, 1849) + } +}