solution: day16
This commit is contained in:
parent
00000300d5
commit
0000031000
|
@ -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);
|
||||
}
|
Loading…
Reference in New Issue