From f3833dc637840fca55f253c9f362641499aa42be Mon Sep 17 00:00:00 2001 From: Reiner Herrmann Date: Sun, 2 Oct 2022 21:48:53 +0200 Subject: day17 --- src/bin/day17.rs | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/bin/day17.rs (limited to 'src/bin/day17.rs') diff --git a/src/bin/day17.rs b/src/bin/day17.rs new file mode 100644 index 0000000..1f3d009 --- /dev/null +++ b/src/bin/day17.rs @@ -0,0 +1,41 @@ +use itertools::Itertools; + +fn main() { + let input = advent::read_numbers(17); + println!("17a: {}", container_fittings(&input, 150)); + println!("17b: {}", minimum_containers(&input, 150)); +} + +fn container_fittings(input: &[u16], target: u16) -> usize { + input.iter() + .powerset() + .filter(|containers| containers.iter().copied().sum::() == target) + .count() +} + +fn minimum_containers(input: &[u16], target: u16) -> usize { + let min_count = input.iter() + .powerset() + .filter(|containers| containers.iter().copied().sum::() == target) + .map(|containers| containers.len()) + .min() + .unwrap(); + + input.iter() + .powerset() + .filter(|containers| containers.len() == min_count) + .filter(|containers| containers.iter().copied().sum::() == target) + .count() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test() { + let input = [20, 15, 10, 5, 5]; + assert_eq!(container_fittings(&input, 25), 4); + assert_eq!(minimum_containers(&input, 25), 3); + } +} -- cgit v1.2.3