From 0284625726c296163b3aa32eba1b146efcb37651 Mon Sep 17 00:00:00 2001 From: Ben C Date: Wed, 3 Dec 2025 02:16:40 -0500 Subject: [PATCH] Day 3 --- years/2025/src/day_3.rs | 65 ++++++++++++++++++++++++++--- years/2025/src/examples/day_3/1.txt | 4 ++ years/2025/src/examples/day_3/2.txt | 4 ++ 3 files changed, 67 insertions(+), 6 deletions(-) diff --git a/years/2025/src/day_3.rs b/years/2025/src/day_3.rs index 8ae384b..a99b607 100644 --- a/years/2025/src/day_3.rs +++ b/years/2025/src/day_3.rs @@ -1,17 +1,70 @@ - use advent_core::{Day, day_stuff, ex_for_day}; pub struct Day3; impl Day for Day3 { + day_stuff!(3, "357", "3121910778619", Vec>); + + fn part_1(input: Self::Input) -> Option { + let ans = input + .into_iter() + .map(|bank| { + let (largest_idx, largest) = bank + .iter() + .enumerate() + .take(bank.len() - 1) + .rev() + .max_by(|(_, x), (_, y)| (**x).cmp(*y)) + .map(|(i, x)| (i, *x)) + .unwrap(); + let rest = bank.into_iter().skip(largest_idx + 1); + let next_largest = rest.max().unwrap(); + largest * 10 + next_largest + }) + .sum::(); + + Some(ans.to_string()) + } + + fn part_2(input: Self::Input) -> Option { + let ans = input + .into_iter() + .map(|bank| { + let mut num = 0; + let mut start = 0; + + for i in 0..12 { + let (idx, largest) = bank + .iter() + .enumerate() + .filter(|(idx, _)| { + (i == 0 || *idx > start) && *idx + (11 - i) <= (bank.len() - 1) + }) + .rev() + .max_by(|(_, x), (_, y)| (**x).cmp(*y)) + .map(|(idx, x)| (idx, *x)) + .unwrap(); + + num += largest * 10_usize.pow((11 - i) as u32); + start = idx; + } - day_stuff!(3, "", ""); + num + }) + .sum::(); - fn part_1(_input: Self::Input) -> Option { - None + Some(ans.to_string()) } - fn part_2(_input: Self::Input) -> Option { - None + fn parse_input(input: &str) -> Self::Input { + input + .lines() + .map(|l| { + l.trim() + .chars() + .map(|c| c.to_digit(10).unwrap() as usize) + .collect() + }) + .collect() } } diff --git a/years/2025/src/examples/day_3/1.txt b/years/2025/src/examples/day_3/1.txt index e69de29..7255fca 100644 --- a/years/2025/src/examples/day_3/1.txt +++ b/years/2025/src/examples/day_3/1.txt @@ -0,0 +1,4 @@ +987654321111111 +811111111111119 +234234234234278 +818181911112111 diff --git a/years/2025/src/examples/day_3/2.txt b/years/2025/src/examples/day_3/2.txt index e69de29..7255fca 100644 --- a/years/2025/src/examples/day_3/2.txt +++ b/years/2025/src/examples/day_3/2.txt @@ -0,0 +1,4 @@ +987654321111111 +811111111111119 +234234234234278 +818181911112111 -- 2.51.2