2021-09
This commit is contained in:
parent
1ebc218487
commit
9870df25fb
@ -17,7 +17,7 @@ export const genNeighbours = (maxX,maxY) => (x,y) =>
|
|||||||
return true;
|
return true;
|
||||||
} );
|
} );
|
||||||
|
|
||||||
const genCoords = grid => ([x,y]) => grid[x][y];
|
export const genCoords = grid => ([x,y]) => grid[x][y];
|
||||||
|
|
||||||
export function solution(grid) {
|
export function solution(grid) {
|
||||||
const seen = grid.map( () => [] );
|
const seen = grid.map( () => [] );
|
||||||
|
@ -4,5 +4,41 @@ import _ from "lodash";
|
|||||||
|
|
||||||
import * as p1 from './part1.mjs';
|
import * as p1 from './part1.mjs';
|
||||||
|
|
||||||
export function solution(input) {
|
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 ) ;
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,6 @@ tap.test("part1", async (t) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
tap.test("part2", async (t) => {
|
tap.test("part2", async (t) => {
|
||||||
/* t.equal(p2.solution(await sample, 256), 26984457539); */
|
t.equal(p2.solution(await sample), 1134);
|
||||||
/* t.equal(p2.solution(await input, 256), 1622533344325); */
|
t.equal(p2.solution(await input), 1100682);
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user