y2015d16
This commit is contained in:
20
y2015/src/bin/d16.rs
Normal file
20
y2015/src/bin/d16.rs
Normal 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
74
y2015/src/days/d16.rs
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -13,3 +13,5 @@ pub mod d6;
|
||||
pub mod d7;
|
||||
pub mod d8;
|
||||
pub mod d9;
|
||||
|
||||
pub mod d16;
|
||||
|
||||
Reference in New Issue
Block a user