solution: day16
This commit is contained in:
		
							
								
								
									
										74
									
								
								src/bin/16.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								src/bin/16.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,74 @@ | |||||||
|  | use lazy_static::lazy_static; | ||||||
|  | use std::collections::HashMap; | ||||||
|  |  | ||||||
|  | lazy_static! { | ||||||
|  |     static ref MFCSAM: HashMap<String, u32> = HashMap::from([ | ||||||
|  |         ("children".to_string(), 3), | ||||||
|  |         ("cats".to_string(), 7), | ||||||
|  |         ("samoyeds".to_string(), 2), | ||||||
|  |         ("pomeranians".to_string(), 3), | ||||||
|  |         ("akitas".to_string(), 0), | ||||||
|  |         ("vizslas".to_string(), 0), | ||||||
|  |         ("goldfish".to_string(), 5), | ||||||
|  |         ("trees".to_string(), 3), | ||||||
|  |         ("cars".to_string(), 2), | ||||||
|  |         ("perfumes".to_string(), 1), | ||||||
|  |     ]); | ||||||
|  | } | ||||||
|  | pub fn part_one(input: &str) -> Option<u32> { | ||||||
|  |     for line in input.lines() { | ||||||
|  |         let (aunt, inventory) = line.split_once(": ").unwrap(); | ||||||
|  |         let n = aunt[4..].parse().unwrap(); | ||||||
|  |         let mut matching = true; | ||||||
|  |         for (item, amount_str) in inventory.split(", ").map(|x| x.split_once(": ").unwrap()) { | ||||||
|  |             let amount = amount_str.parse().unwrap(); | ||||||
|  |             if MFCSAM.get(item).unwrap() != &amount { | ||||||
|  |                 matching = false; | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         if matching { | ||||||
|  |             return Some(n); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     None | ||||||
|  | } | ||||||
|  | pub fn part_two(input: &str) -> Option<u32> { | ||||||
|  |     for line in input.lines() { | ||||||
|  |         let (aunt, inventory) = line.split_once(": ").unwrap(); | ||||||
|  |         let n = aunt[4..].parse().unwrap(); | ||||||
|  |         let mut matching = true; | ||||||
|  |         for (item, amount_str) in inventory.split(", ").map(|x| x.split_once(": ").unwrap()) { | ||||||
|  |             let amount = amount_str.parse().unwrap(); | ||||||
|  |             match item { | ||||||
|  |                 "cats" | "trees" => { | ||||||
|  |                     if MFCSAM.get(item).unwrap() >= &amount { | ||||||
|  |                         matching = false; | ||||||
|  |                         break; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 "pomeranians" | "goldfish" => { | ||||||
|  |                     if MFCSAM.get(item).unwrap() <= &amount { | ||||||
|  |                         matching = false; | ||||||
|  |                         break; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 _ => { | ||||||
|  |                     if MFCSAM.get(item).unwrap() != &amount { | ||||||
|  |                         matching = false; | ||||||
|  |                         break; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         if matching { | ||||||
|  |             return Some(n); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     None | ||||||
|  | } | ||||||
|  | fn main() { | ||||||
|  |     let input = &aoc::read_file("inputs", 16); | ||||||
|  |     aoc::solve!(1, part_one, input); | ||||||
|  |     aoc::solve!(2, part_two, input); | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user