prettier
This commit is contained in:
parent
ff4203a58f
commit
94fc825a0b
120
2022/08/part1.js
120
2022/08/part1.js
@ -1,6 +1,6 @@
|
||||
import * as R from "remeda";
|
||||
import { readFile } from "../05/part1.js";
|
||||
import Victor from '@a-robu/victor';
|
||||
import Victor from "@a-robu/victor";
|
||||
|
||||
const V = (...args) => new Victor(...args);
|
||||
|
||||
@ -8,80 +8,80 @@ const readInput = (...args) =>
|
||||
readFile(...args)
|
||||
.split("\n")
|
||||
.filter((x) => x)
|
||||
.map( l => l.split('').map( x => parseInt(x) ) );
|
||||
.map((l) => l.split("").map((x) => parseInt(x)));
|
||||
|
||||
export function generateVisibilityGrid(forest) {
|
||||
const size = forest.length;
|
||||
const visibility = Array(size).fill(null).map(
|
||||
() => Array(size).fill(false)
|
||||
);
|
||||
const size = forest.length;
|
||||
const visibility = Array(size)
|
||||
.fill(null)
|
||||
.map(() => Array(size).fill(false));
|
||||
|
||||
// top
|
||||
const positions = R.range(size)(0).map( x => ({
|
||||
height: -1,
|
||||
position: V(x,-1),
|
||||
inc: V(0,1),
|
||||
}) );
|
||||
// top
|
||||
const positions = R.range(size)(0).map((x) => ({
|
||||
height: -1,
|
||||
position: V(x, -1),
|
||||
inc: V(0, 1),
|
||||
}));
|
||||
|
||||
// bottom
|
||||
positions.push(
|
||||
...R.range(size)(0).map( x => ({
|
||||
height: -1,
|
||||
position: V(x,size),
|
||||
inc: V(0,-1),
|
||||
}) )
|
||||
);
|
||||
// bottom
|
||||
positions.push(
|
||||
...R.range(size)(0).map((x) => ({
|
||||
height: -1,
|
||||
position: V(x, size),
|
||||
inc: V(0, -1),
|
||||
}))
|
||||
);
|
||||
|
||||
positions.push(
|
||||
...R.range(size)(0).map( x => ({
|
||||
height: -1,
|
||||
position: V(-1,x),
|
||||
inc: V(1,0),
|
||||
}) )
|
||||
);
|
||||
positions.push(
|
||||
...R.range(size)(0).map( x => ({
|
||||
height: -1,
|
||||
position: V(size,x),
|
||||
inc: V(-1,0),
|
||||
}) )
|
||||
);
|
||||
positions.push(
|
||||
...R.range(size)(0).map((x) => ({
|
||||
height: -1,
|
||||
position: V(-1, x),
|
||||
inc: V(1, 0),
|
||||
}))
|
||||
);
|
||||
positions.push(
|
||||
...R.range(size)(0).map((x) => ({
|
||||
height: -1,
|
||||
position: V(size, x),
|
||||
inc: V(-1, 0),
|
||||
}))
|
||||
);
|
||||
|
||||
const outOfBound = (pos) => {
|
||||
if( Math.min( pos.x, pos.y ) < 0 ) return true;
|
||||
if( Math.max( pos.x, pos.y ) >= size ) return true;
|
||||
return false;
|
||||
const outOfBound = (pos) => {
|
||||
if (Math.min(pos.x, pos.y) < 0) return true;
|
||||
if (Math.max(pos.x, pos.y) >= size) return true;
|
||||
return false;
|
||||
};
|
||||
|
||||
while (positions.length) {
|
||||
const pos = positions.shift();
|
||||
pos.position.add(pos.inc);
|
||||
|
||||
if (outOfBound(pos.position)) continue;
|
||||
|
||||
if (forest[pos.position.x][pos.position.y] > pos.height) {
|
||||
visibility[pos.position.x][pos.position.y] = true;
|
||||
pos.height = forest[pos.position.x][pos.position.y];
|
||||
}
|
||||
|
||||
while( positions.length ) {
|
||||
const pos = positions.shift();
|
||||
pos.position.add( pos.inc );
|
||||
positions.push(pos);
|
||||
}
|
||||
|
||||
if( outOfBound( pos.position ) ) continue;
|
||||
|
||||
if( forest[pos.position.x][pos.position.y] > pos.height ) {
|
||||
visibility[pos.position.x][pos.position.y] = true;
|
||||
pos.height = forest[pos.position.x][pos.position.y];
|
||||
}
|
||||
|
||||
positions.push(pos);
|
||||
}
|
||||
|
||||
return visibility;
|
||||
return visibility;
|
||||
}
|
||||
|
||||
export const puzzleInput = readInput(import.meta.url, "input");
|
||||
export const sample = readInput(import.meta.url, "sample");
|
||||
|
||||
function printMap( forest ) {
|
||||
forest.forEach( line => console.log(line.join(' ')) );
|
||||
return forest;
|
||||
function printMap(forest) {
|
||||
forest.forEach((line) => console.log(line.join(" ")));
|
||||
return forest;
|
||||
}
|
||||
|
||||
export default R.createPipe(
|
||||
printMap,
|
||||
generateVisibilityGrid,
|
||||
printMap,
|
||||
R.flatten,
|
||||
R.countBy(R.identity)
|
||||
printMap,
|
||||
generateVisibilityGrid,
|
||||
printMap,
|
||||
R.flatten,
|
||||
R.countBy(R.identity)
|
||||
);
|
||||
|
Loading…
Reference in New Issue
Block a user