From 1860c9cd4b2f9127902b9ee503209502e3bbfb94 Mon Sep 17 00:00:00 2001 From: Reiner Herrmann Date: Sat, 27 Aug 2022 21:26:33 +0200 Subject: day2 --- src/bin/day2.rs | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/bin/day2.rs (limited to 'src/bin/day2.rs') diff --git a/src/bin/day2.rs b/src/bin/day2.rs new file mode 100644 index 0000000..df1b1d3 --- /dev/null +++ b/src/bin/day2.rs @@ -0,0 +1,47 @@ +fn main() { + let input = advent::read_lines(2); + println!("2a: {}", calculate(&input, area_with_slack)); + println!("2b: {}", calculate(&input, ribbon_length)); +} + +fn area_with_slack(a: u32, b: u32, c: u32) -> u32 { + let x = a * b; + let y = a * c; + let z = b * c; + let slack = *[x, y, z].iter().min().unwrap(); + 2*x + 2*y + 2*z + slack +} + +fn ribbon_length(a: u32, b: u32, c: u32) -> u32 { + let mut lens = Vec::from([a, b, c]); + lens.sort(); + + 2 * lens[0] + 2 * lens[1] + lens.iter().product::() +} + +fn calculate>(input: &[T], f: fn(u32, u32, u32) -> u32) -> u32 { + input.iter() + .map(|line| line.as_ref() + .splitn(3, 'x') + .map(|n| n.parse::().unwrap()) + .collect::>()) + .map(|v| f(v[0], v[1], v[2])) + .sum() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_area() { + assert_eq!(area_with_slack(2,3,4), 58); + assert_eq!(area_with_slack(1,1,10), 43); + } + + #[test] + fn test_ribbon() { + assert_eq!(ribbon_length(2,3,4), 34); + assert_eq!(ribbon_length(1,1,10), 14); + } +} -- cgit v1.2.3