1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
use crate::Input;
pub fn solve(input: &mut Input) -> Result<u32, String> {
let target_presents = input
.text
.parse::<u32>()
.map_err(|e| format!("Could not parse house number: {}", e))?;
let present_multiplier = input.part_values(10, 11);
let max_visits = input.part_values(usize::MAX, 50);
let highest_house_number = target_presents / present_multiplier;
let mut presents = vec![0; highest_house_number as usize];
for elf_number in 1..highest_house_number {
for house_number in (elf_number..highest_house_number)
.step_by(elf_number as usize)
.take(max_visits)
{
presents[house_number as usize] += elf_number * present_multiplier;
}
}
presents
.iter()
.enumerate()
.find(|&(_index, ¤t)| current >= target_presents)
.map(|(index, _current)| index as u32)
.ok_or_else(|| "No solution found".to_string())
}
#[test]
pub fn tests() {
use crate::{test_part_one, test_part_two};
let real_input = include_str!("day20_input.txt");
test_part_one!(real_input => 786_240);
test_part_two!(real_input => 831_600);
}