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::().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::().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::().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::().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() }