62 lines
1.8 KiB
Rust
62 lines
1.8 KiB
Rust
|
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()
|
||
|
}
|