This commit is contained in:
Fabian Schmidt
2024-11-02 13:35:50 +01:00
parent a687f18918
commit 7f93abc07d
4 changed files with 596 additions and 0 deletions

20
y2015/src/bin/d16.rs Normal file
View File

@@ -0,0 +1,20 @@
use std::fs;
use y2015::days::d16;
fn main() {
part1();
part2();
}
fn part1() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/16_input.txt")).unwrap();
println!("{}", d16::process_part1(&content));
}
fn part2() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/16_input.txt")).unwrap();
println!("{}", d16::process_part2(&content));
}

74
y2015/src/days/d16.rs Normal file
View File

@@ -0,0 +1,74 @@
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()
}
#[cfg(test)]
mod tests {
use super::*;
const INPUT: &str = "{{EXAMPLE}}";
#[test]
fn part2() {
let result = process_part2(INPUT);
assert_eq!(result, 0);
}
}

View File

@@ -13,3 +13,5 @@ pub mod d6;
pub mod d7;
pub mod d8;
pub mod d9;
pub mod d16;