adventofcode/2021/09/part2.mjs

45 lines
1.0 KiB
JavaScript

import fs from "fs-extra";
import fp from "lodash/fp.js";
import _ from "lodash";
import * as p1 from './part1.mjs';
function getBasinSize( [x,y], grid, seen ) {
if( seen[x][y] ) return 0;
seen[x][y] = true;
if( grid[x][y] == 9 ) return 0;
let size = 1;
const neighbours = p1.genNeighbours(grid.length,grid[0].length);
const coords = p1.genCoords(grid);
neighbours(x,y).map( n => getBasinSize(n,grid,seen) ).forEach(
x => size+=x
);
return size;
}
export function solution(grid) {
const seen = grid.map( () => [] );
let basinSizes = [];
for( const x of _.range(grid.length) ) {
for( const y of _.range(grid[x].length) ) {
if( seen[x][y] ) continue;
if( grid[x][y] == 9 ) {
seen[x][y] = true;
continue;
}
basinSizes.push( getBasinSize([x,y],grid,seen));
}
}
basinSizes.sort( (a,b) => a < b ? 1 : -1 );
return basinSizes.splice(0,3).reduce( (a,b) => a*b ) ;
}