From ef83390c02a3af56553c882b3aff10422952e9e8 Mon Sep 17 00:00:00 2001 From: Johannes Date: Tue, 29 Oct 2024 23:04:12 +0100 Subject: [PATCH] day 20 part 2 --- src/day20.rs | 42 ++++++++++++++++++++++++++++++++++++++++++ src/lib.rs | 1 + 2 files changed, 43 insertions(+) create mode 100644 src/day20.rs diff --git a/src/day20.rs b/src/day20.rs new file mode 100644 index 0000000..20a571b --- /dev/null +++ b/src/day20.rs @@ -0,0 +1,42 @@ +use std::cmp::min; + +use aoc_runner_derive::{aoc, aoc_generator}; + +#[aoc_generator(day20)] +fn parse(input: &str) -> u64 { + input.parse().unwrap() +} + +#[aoc(day20, part1)] +fn part1(min_presents: &u64) -> usize { + let min_presents = (min_presents / 10) as usize; + let mut house_presents = vec![0; min_presents + 1]; + for elf in 1..=min_presents { + for visited_house in (elf..=min_presents).step_by(elf) { + house_presents[visited_house] += elf; + } + } + house_presents + .into_iter() + .enumerate() + .find(|(_, value)| value >= &min_presents) + .unwrap() + .0 +} + +#[aoc(day20, part2)] +fn part2(min_presents: &u64) -> usize { + let min_presents = *min_presents as usize; + let mut house_presents = vec![0; min_presents + 1]; + for elf in 1..=min_presents { + for visited_house in (elf..=min(min_presents, elf * 50)).step_by(elf) { + house_presents[visited_house] += elf * 11; + } + } + house_presents + .into_iter() + .enumerate() + .find(|(_, value)| value >= &min_presents) + .unwrap() + .0 +} diff --git a/src/lib.rs b/src/lib.rs index 5598cfc..d7d8d10 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,5 +12,6 @@ mod day16; mod day17; mod day18; mod day19; +mod day20; aoc_lib! { year = 2015 }