diff --git a/2022/08/part1.js b/2022/08/part1.js index 5d9cffd..3c7377f 100644 --- a/2022/08/part1.js +++ b/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) );