AdventOfCode/y2015/src/days/d16.rs

62 lines
1.8 KiB
Rust
Raw Normal View History

2024-11-02 13:35:50 +01:00
use std::collections::HashMap;
const TAPE: &str = "children: 3
cats: 7
samoyeds: 2
pomeranians: 3
akitas: 0
vizslas: 0
goldfish: 5
trees: 3
cars: 2
perfumes: 1";
pub fn process_part1(input: &str) -> String {
let mut tape = HashMap::new();
TAPE.lines().for_each(|line| {
let (k, v) = line.split_once(": ").unwrap();
tape.insert(k, v.parse::<u32>().unwrap());
});
for line in input.lines() {
let (sue, params) = line.split_once(": ").unwrap();
let mut is_correct = true;
params.split(", ").for_each(|param| {
let (k, v) = param.split_once(": ").unwrap();
if v.parse::<u32>().unwrap() != *tape.get(k).unwrap() {
is_correct = false;
}
});
if is_correct {
return sue.to_string();
}
}
"".to_string()
}
pub fn process_part2(input: &str) -> String {
let mut tape = HashMap::new();
TAPE.lines().for_each(|line| {
let (k, v) = line.split_once(": ").unwrap();
tape.insert(k, v.parse::<u32>().unwrap());
});
for line in input.lines() {
let (sue, params) = line.split_once(": ").unwrap();
let mut is_correct = true;
params.split(", ").for_each(|param| {
let (k, v) = param.split_once(": ").unwrap();
let v = v.parse::<u32>().unwrap();
let tape_value = *tape.get(k).unwrap();
if (["cats", "trees"].contains(&k) && v <= tape_value)
|| (["pomeranians", "goldfish"].contains(&k) && v >= tape_value)
|| (!["cats", "trees", "pomeranians", "goldfish"].contains(&k) && v != tape_value)
{
is_correct = false;
}
});
if is_correct {
return sue.to_string();
}
}
"".to_string()
}