From 6b6bdff5d3abfbf5a9fbfc6818acdf5f1ab427fc Mon Sep 17 00:00:00 2001 From: Johannes Date: Sun, 23 Jun 2024 10:17:06 +0200 Subject: [PATCH] Day 16 part 1. --- src/day16.rs | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/lib.rs | 1 + 2 files changed, 56 insertions(+) create mode 100644 src/day16.rs diff --git a/src/day16.rs b/src/day16.rs new file mode 100644 index 0000000..ca53395 --- /dev/null +++ b/src/day16.rs @@ -0,0 +1,55 @@ +use std::collections::HashMap; + +use aoc_runner_derive::{aoc, aoc_generator}; + +#[aoc_generator(day16)] +fn parse(input: &str) -> Vec { + input.lines() + .map(|line| { + let (_, hints) = line.split_once(": ").unwrap(); + let hints: Vec<_> = hints.split(", ").collect(); + hints.into_iter().map(|thing| { + let (name, count) = thing.split_once(": ").unwrap(); + (name.to_string(), count.parse().unwrap()) + }).collect() + }) + .collect() +} + +#[aoc(day16, part1)] +fn part1(input: &[Sue]) -> usize { + let known = "children: 3 +cats: 7 +samoyeds: 2 +pomeranians: 3 +akitas: 0 +vizslas: 0 +goldfish: 5 +trees: 3 +cars: 2 +perfumes: 1"; + let known: Sue = known.split("\n") + .map(|line| { + let (name, count) = line.split_once(": ").unwrap(); + (name.to_string(), count.parse().unwrap()) + }).collect(); + + let sue = input.iter() + .enumerate() + .filter(|(_index, sue)| { + known.iter() + .all(|(property, _)| { + !sue.contains_key(property) || known.get(property) == sue.get(property) + }) + }) + .next().unwrap(); + sue.0 + 1 +} + +// #[aoc(day16, part2)] +// fn part2(input: &[Ingredient]) -> i32 { +// 0 +// } + +type Sue = HashMap; + diff --git a/src/lib.rs b/src/lib.rs index 6367266..7e780e4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -8,5 +8,6 @@ mod day12; mod day13; mod day14; mod day15; +mod day16; aoc_lib! { year = 2015 }