refactoring

main
Yanick Champoux 2021-12-10 12:23:45 -05:00
parent 85a9eb3107
commit eee25031e3
1 changed files with 17 additions and 25 deletions

View File

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