From fa26f694d8cf98272763952a698301ee9935c19e Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Thu, 26 Jun 2025 09:47:23 +0200 Subject: Added 2022, first few problems --- 2022/08/a.rs | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 2022/08/a.rs (limited to '2022/08/a.rs') diff --git a/2022/08/a.rs b/2022/08/a.rs new file mode 100644 index 0000000..b145486 --- /dev/null +++ b/2022/08/a.rs @@ -0,0 +1,42 @@ +use std::cmp::max; +mod common; +use common::*; + +fn mark_visible(grid: &mut Grid) { + let update = |elem: &mut (i8, bool), m: &mut i8| { + elem.1 = elem.1 || elem.0 > *m; + *m = max(*m, elem.0); + }; + + for row in &mut *grid { + // From left + let mut m = -1; + for t in &mut *row { update(t, &mut m); } + + // From right + let mut m = -1; + for t in &mut row.iter_mut().rev() { update(t, &mut m); } + } + + for j in 0..grid[0].len() { + // From top + let mut m = -1; + for i in 0..grid.len() { update(&mut grid[i][j], &mut m); } + + // From bottom + let mut m = -1; + for i in (0..grid.len()).rev() { update(&mut grid[i][j], &mut m); } + } +} + +fn count_visible(grid: &Grid) -> usize { + grid.iter() + .map(|row| row.iter().filter(|c| c.1).count()) + .sum() +} + +fn main() { + let mut grid = read_grid_from_stdin(); + mark_visible(&mut grid); + println!("{}", count_visible(&grid)); +} -- cgit v1.3