solution: day17
This commit is contained in:
		
							
								
								
									
										50
									
								
								src/bin/17.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								src/bin/17.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,50 @@ | |||||||
|  | use aoc::helpers::to_vec; | ||||||
|  | use itertools::Itertools; | ||||||
|  |  | ||||||
|  | pub fn part_one(input: &str) -> Option<u32> { | ||||||
|  |     let containers = to_vec::<u32>(input, '\n'); | ||||||
|  |     Some( | ||||||
|  |         (0..containers.len()) | ||||||
|  |             .map(|x| { | ||||||
|  |                 containers | ||||||
|  |                     .iter() | ||||||
|  |                     .combinations(x) | ||||||
|  |                     .map(|y| y.iter().map(|w| *w).sum::<u32>()) | ||||||
|  |                     .filter(|&z| z == 150) | ||||||
|  |                     .count() | ||||||
|  |             }) | ||||||
|  |             .sum::<usize>() as u32, | ||||||
|  |     ) | ||||||
|  | } | ||||||
|  | pub fn part_two(input: &str) -> Option<u32> { | ||||||
|  |     let containers = to_vec::<u32>(input, '\n'); | ||||||
|  |     let v = (1..=containers.len()) | ||||||
|  |         .map(|x| { | ||||||
|  |             containers | ||||||
|  |                 .iter() | ||||||
|  |                 .combinations(x) | ||||||
|  |                 .map(|y| (y.len(), y.iter().map(|w| *w).sum::<u32>())) | ||||||
|  |                 .filter(|(_, z)| z == &150) | ||||||
|  |                 .map(|(t, _)| t) | ||||||
|  |                 .collect_vec() | ||||||
|  |         }) | ||||||
|  |         .filter(|x| x.len() > 0) | ||||||
|  |         .map(|x| { | ||||||
|  |             let m = x.iter().min().unwrap(); | ||||||
|  |             (*m, x.iter().filter(|&y| y == m).count()) | ||||||
|  |         }) | ||||||
|  |         .collect_vec(); | ||||||
|  |     let m = v.iter().map(|(a, _)| a).min().unwrap(); | ||||||
|  |     Some( | ||||||
|  |         v.iter() | ||||||
|  |             .filter(|(a, _)| a == m) | ||||||
|  |             .map(|(_, b)| *b) | ||||||
|  |             .sum::<usize>() as u32, | ||||||
|  |     ) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | fn main() { | ||||||
|  |     let input = &aoc::read_file("inputs", 17); | ||||||
|  |     aoc::solve!(1, part_one, input); | ||||||
|  |     aoc::solve!(2, part_two, input); | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user