|
|
|
@ -1,8 +1,7 @@
@@ -1,8 +1,7 @@
|
|
|
|
|
import * as R from "remeda"; |
|
|
|
|
import memo from "memoizerific"; |
|
|
|
|
import Victor from "@a-robu/victor"; |
|
|
|
|
|
|
|
|
|
import { printMap, outOfBound } from "./part1"; |
|
|
|
|
import { outOfBound } from "./part1"; |
|
|
|
|
|
|
|
|
|
const V = (...args) => new Victor(...args); |
|
|
|
|
|
|
|
|
@ -21,8 +20,8 @@ function visibility(forest, x, y, dx, dy) {
@@ -21,8 +20,8 @@ function visibility(forest, x, y, dx, dy) {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const visibilityAround = (forest) => (x, y) => { |
|
|
|
|
return [ |
|
|
|
|
const visibilityAround = (forest) => (x, y) => |
|
|
|
|
[ |
|
|
|
|
[0, 1], |
|
|
|
|
[0, -1], |
|
|
|
|
[1, 0], |
|
|
|
@ -30,20 +29,11 @@ const visibilityAround = (forest) => (x, y) => {
@@ -30,20 +29,11 @@ const visibilityAround = (forest) => (x, y) => {
|
|
|
|
|
] |
|
|
|
|
.map((d) => visibility(forest, x, y, ...d)) |
|
|
|
|
.reduce((a, b) => a * b); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
export default R.createPipe( |
|
|
|
|
(forest) => { |
|
|
|
|
const viz = Array(forest.length) |
|
|
|
|
.fill(null) |
|
|
|
|
.map(() => Array(forest.length).fill(0)); |
|
|
|
|
|
|
|
|
|
for (const x of R.range(0, forest.length)) { |
|
|
|
|
for (const y of R.range(0, forest.length)) { |
|
|
|
|
viz[x][y] = visibilityAround(forest)(x, y); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return viz; |
|
|
|
|
const va = visibilityAround(forest); |
|
|
|
|
return forest.map((l, x) => l.map((_, y) => va(x, y))); |
|
|
|
|
}, |
|
|
|
|
R.flatten, |
|
|
|
|
R.maxBy(R.identity) |
|
|
|
|