From 738b558c549dd2f21eb28c308dfac9a844d2ba1f Mon Sep 17 00:00:00 2001 From: timeshifter Date: Sun, 7 Jun 2026 20:59:18 +0200 Subject: [PATCH] solved day 6 part 2 --- day06/src/main.rs | 49 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/day06/src/main.rs b/day06/src/main.rs index 7c711f6..db2d0d3 100644 --- a/day06/src/main.rs +++ b/day06/src/main.rs @@ -16,7 +16,9 @@ enum Switch { } #[derive(Debug)] -enum ParseLineError {} +enum ParseLineError { + WrongKeyword, +} impl std::fmt::Display for ParseLineError { fn fmt(&self, _: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { @@ -60,7 +62,7 @@ impl FromStr for Switch { "turn on" => Switch::On(rect), "turn off" => Switch::Off(rect), "toggle" => Switch::Toggle(rect), - _ => unreachable!(), + _ => return Err(ParseLineError::WrongKeyword), }; Ok(instance) @@ -75,6 +77,8 @@ fn main() { .collect(); part_1(&data); + + part_2(&data); } #[allow(clippy::needless_range_loop)] @@ -119,3 +123,44 @@ fn part_1(data: &[Switch]) { println!("{sum}"); } + +#[allow(clippy::needless_range_loop)] +fn part_2(data: &[Switch]) { + let mut grid = vec![vec![0_usize; 1000]; 1000]; + + for task in data { + match task { + Switch::On(rect) => { + for x in rect.0.0..=rect.1.0 { + for y in rect.0.1..=rect.1.1 { + grid[x][y] += 1; + } + } + } + Switch::Off(rect) => { + for x in rect.0.0..=rect.1.0 { + for y in rect.0.1..=rect.1.1 { + grid[x][y] = grid[x][y].saturating_sub(1); + } + } + } + Switch::Toggle(rect) => { + for x in rect.0.0..=rect.1.0 { + for y in rect.0.1..=rect.1.1 { + grid[x][y] += 2; + } + } + } + } + } + + let mut sum = 0; + + for x in 0..1000 { + for y in 0..1000 { + sum += grid[x][y]; + } + } + + println!("{sum}"); +}