done with part 2

This commit is contained in:
Joe Ardent 2022-12-08 16:38:46 -08:00
parent ed0c44e2b1
commit f8e2ed0cb7

View file

@ -5,7 +5,6 @@ use aoc_runner_derive::{aoc as aoc_run, aoc_generator};
use ndarray::prelude::*; use ndarray::prelude::*;
type Forest = Array2<i8>; type Forest = Array2<i8>;
type Tree = (i8, i8);
#[aoc_generator(day8)] #[aoc_generator(day8)]
fn parse_input_day1(input: &str) -> Forest { fn parse_input_day1(input: &str) -> Forest {
@ -77,5 +76,38 @@ fn part1(input: &Forest) -> usize {
#[aoc_run(day8, part2)] #[aoc_run(day8, part2)]
fn part2(input: &Forest) -> usize { fn part2(input: &Forest) -> usize {
0 let nrows = input.nrows();
let ncols = input.ncols();
let mut max = 0;
for row in 0..nrows {
for col in 0..ncols {
let (e, w) = check_span(col, &input.row(row));
let (n, s) = check_span(row, &input.column(col));
max = (e * w * n * s).max(max);
}
}
max
}
fn check_span(addr: usize, span: &ArrayView1<i8>) -> (usize, usize) {
let height = span[addr];
let (mut a, mut b) = (0, 0);
//
let neg = span.slice(s![0..addr]);
let pos = span.slice(s![addr..]);
for e in neg.iter().rev() {
a += 1;
if *e >= height {
break;
}
}
for e in pos.iter().skip(1) {
b += 1;
if *e >= height {
break;
}
}
(a, b)
} }