aboutsummaryrefslogtreecommitdiff
path: root/2022/08/b.rs
diff options
context:
space:
mode:
Diffstat (limited to '2022/08/b.rs')
-rw-r--r--2022/08/b.rs47
1 files changed, 47 insertions, 0 deletions
diff --git a/2022/08/b.rs b/2022/08/b.rs
new file mode 100644
index 0000000..5f7bce8
--- /dev/null
+++ b/2022/08/b.rs
@@ -0,0 +1,47 @@
1use std::cmp::max;
2mod common;
3use common::*;
4
5fn count_visible_from(grid: &Grid, i0: usize, j0: usize) -> usize {
6 let x = grid[i0][j0].0;
7 let mut top = 0;
8 for i in (0..i0).rev() {
9 top += 1;
10 if grid[i][j0].0 >= x { break; }
11 }
12
13 let mut bottom = 0;
14 for i in i0+1..grid.len() {
15 bottom += 1;
16 if grid[i][j0].0 >= x { break; }
17 }
18
19 let mut left = 0;
20 for j in (0..j0).rev() {
21 left += 1;
22 if grid[i0][j].0 >= x { break; }
23 }
24
25 let mut right = 0;
26 for j in j0+1..grid[0].len() {
27 right += 1;
28 if grid[i0][j].0 >= x { break; }
29 }
30
31 top * bottom * left * right
32}
33
34fn max_view_factor(grid: &Grid) -> usize {
35 let mut m = 0;
36 for i in 0..grid.len() {
37 for j in 0..grid[0].len() {
38 m = max(m, count_visible_from(grid, i, j));
39 }
40 }
41 m
42}
43
44fn main() {
45 let grid = read_grid_from_stdin();
46 println!("{}", max_view_factor(&grid));
47}

Generated with cgit - Back to sebastiano.tronto.net