done with part 2
This commit is contained in:
parent
ed0c44e2b1
commit
f8e2ed0cb7
1 changed files with 34 additions and 2 deletions
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue