From eee25031e3ad3edbed65ee2ecc0aefb09481d11f Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Fri, 10 Dec 2021 12:23:45 -0500 Subject: [PATCH] refactoring --- 2021/09/part2.mjs | 42 +++++++++++++++++------------------------- 1 file changed, 17 insertions(+), 25 deletions(-) diff --git a/2021/09/part2.mjs b/2021/09/part2.mjs index 1d49a43..2ef8674 100644 --- a/2021/09/part2.mjs +++ b/2021/09/part2.mjs @@ -2,43 +2,35 @@ import fs from "fs-extra"; import fp from "lodash/fp.js"; import _ from "lodash"; -import * as p1 from './part1.mjs'; +import * as p1 from "./part1.mjs"; -function getBasinSize( [x,y], grid, seen ) { - if( seen[x][y] ) return 0; +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; + if (grid[x][y] == 9) return 0; - const neighbours = p1.genNeighbours(grid.length,grid[0].length); - const coords = p1.genCoords(grid); + const neighbours = p1.genNeighbours(grid.length, grid[0].length); - neighbours(x,y).map( n => getBasinSize(n,grid,seen) ).forEach( - x => size+=x - ); - - return size; + return _.sum([ + 1, + ...neighbours(x, y).map((n) => getBasinSize(n, grid, seen)), + ]); } export function solution(grid) { - const seen = grid.map( () => [] ); + 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)); + for (const x of _.range(grid.length)) { + for (const y of _.range(grid[x].length)) { + 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 ) ; + return basinSizes + .sort((a, b) => (a > b ? 1 : -1)) + .splice(-3) + .reduce(_.multiply); }