From db04441437a0bf065e1f642735f8309ac259a49b Mon Sep 17 00:00:00 2001 From: Ben C Date: Sat, 6 Dec 2025 01:20:36 -0500 Subject: [PATCH] Day 6 --- years/2025/src/day_6.rs | 104 ++++++++++++++++++++++++++-- years/2025/src/examples/day_6/1.txt | 4 ++ years/2025/src/examples/day_6/2.txt | 4 ++ 3 files changed, 106 insertions(+), 6 deletions(-) diff --git a/years/2025/src/day_6.rs b/years/2025/src/day_6.rs index d49f739..6103119 100644 --- a/years/2025/src/day_6.rs +++ b/years/2025/src/day_6.rs @@ -1,17 +1,109 @@ - use advent_core::{Day, day_stuff, ex_for_day}; pub struct Day6; +#[derive(Debug, Clone)] +pub enum Prob { + Add(Vec), + Mul(Vec), +} + impl Day for Day6 { + day_stuff!(6, "4277556", "3263827"); + + fn part_1(input: Self::Input) -> Option { + let uno = input.lines().collect::>(); + let dos = uno + .iter() + .take(uno.len() - 1) + .map(|l| { + l.split_whitespace() + .map(|p| p.parse::().unwrap()) + .collect::>() + }) + .collect::>(); + let ops = uno + .iter() + .skip(uno.len() - 1) + .next() + .unwrap() + .split_whitespace() + .collect::>(); + let mut problems = Vec::with_capacity(uno.len()); + + for i in 0..dos[0].len() { + let all_operands = dos.iter().map(|d| d[i]).collect::>(); + let operator = ops[i]; + let prob = if operator == "*" { + Prob::Mul(all_operands) + } else { + Prob::Add(all_operands) + }; + + problems.push(prob); + } - day_stuff!(6, "", ""); + let ans = problems + .into_iter() + .map(|p| match p { + Prob::Add(l) => l.iter().sum::(), + Prob::Mul(l) => l.iter().copied().reduce(|a, b| a * b).unwrap(), + }) + .sum::(); - fn part_1(_input: Self::Input) -> Option { - None + Some(ans.to_string()) } - fn part_2(_input: Self::Input) -> Option { - None + fn part_2(input: Self::Input) -> Option { + let mut cols: Vec> = vec![]; + + for (_, row) in input.lines().enumerate() { + for (j, c) in row.chars().enumerate() { + if let Some(r) = cols.get_mut(j) { + r.push(c); + } else { + cols.push(vec![c]); + } + } + } + + let mut curr_val = 0; + let mut curr_op: Option = None; + let mut tot = 0; + + for col in cols { + if let Some(op) = curr_op { + if col.iter().all(|c| *c == ' ') { + tot += curr_val; + curr_val = 0_usize; + curr_op = None; + } else { + let num = col + .iter() + .collect::() + .trim() + .parse::() + .unwrap(); + if op == '+' { + curr_val += num; + } else { + curr_val *= num; + } + } + } else { + curr_op = Some(col.last().copied().unwrap()); + curr_val = col + .iter() + .take(col.len() - 1) + .collect::() + .trim() + .parse::() + .unwrap(); + } + } + + tot += curr_val; + + Some(tot.to_string()) } } diff --git a/years/2025/src/examples/day_6/1.txt b/years/2025/src/examples/day_6/1.txt index e69de29..337b837 100644 --- a/years/2025/src/examples/day_6/1.txt +++ b/years/2025/src/examples/day_6/1.txt @@ -0,0 +1,4 @@ +123 328 51 64 + 45 64 387 23 + 6 98 215 314 +* + * + diff --git a/years/2025/src/examples/day_6/2.txt b/years/2025/src/examples/day_6/2.txt index e69de29..337b837 100644 --- a/years/2025/src/examples/day_6/2.txt +++ b/years/2025/src/examples/day_6/2.txt @@ -0,0 +1,4 @@ +123 328 51 64 + 45 64 387 23 + 6 98 215 314 +* + * + -- 2.51.2