main
Yanick Champoux 2021-12-10 10:25:34 -05:00
parent 8531620a5a
commit 1ebc218487
4 changed files with 90 additions and 0 deletions

54
2021/09/part1.mjs Normal file
View File

@ -0,0 +1,54 @@
import fs from "fs-extra";
import fp from "lodash/fp.js";
import _ from "lodash";
export const processInput = (filename) => fs.readFile(filename,'utf8').then(
content => content.split("\n").filter(x=>x).map(
lines => lines.split('').map(x => parseInt(x))
)
);
export const genNeighbours = (maxX,maxY) => (x,y) =>
[ [-1,0], [1,0], [0,1], [0,-1] ].map(
delta => _.zip(delta,[x,y]).map(_.sum)
).filter( ([x,y]) => {
if(x<0 || y<0 ) return false;
if( x>= maxX || y>= maxY ) return false;
return true;
} );
const genCoords = grid => ([x,y]) => grid[x][y];
export function solution(grid) {
const seen = grid.map( () => [] );
let risk = 0;
const neighbours = genNeighbours(grid.length,grid[0].length);
const coords = genCoords(grid);
for( const x of _.range(grid.length) ) {
for( const y of _.range(grid[x].length) ) {
if( seen[x][y] ) continue;
let lowest = true;
for( const n of neighbours(x,y) ) {
if( coords(n) > grid[x][y] ) {
seen[n[0]][n[1]] = true;
} else if ( coords(n) == grid[x][y] ) {
seen[n[0]][n[1]] = true;
lowest = false;
} else {
lowest = false;
}
}
if(lowest) {
risk += 1 + grid[x][y];
}
seen[x][y] = true;
}
}
return risk;
}

8
2021/09/part2.mjs Normal file
View File

@ -0,0 +1,8 @@
import fs from "fs-extra";
import fp from "lodash/fp.js";
import _ from "lodash";
import * as p1 from './part1.mjs';
export function solution(input) {
}

5
2021/09/sample Normal file
View File

@ -0,0 +1,5 @@
2199943210
3987894921
9856789892
8767896789
9899965678

23
2021/09/test.mjs Normal file
View File

@ -0,0 +1,23 @@
// https://adventofcode.com/2021/day/09
import tap from "tap";
import fs from "fs-extra";
import * as p1 from "./part1.mjs";
import * as p2 from "./part2.mjs";
const sample = p1.processInput("sample");
const input = p1.processInput("input");
tap.test("part1", async (t) => {
t.match(p1.genNeighbours(10,10)(0,0), [
[1,0],[0,1]
]);
t.equal(p1.solution(await sample), 15);
t.equal(p1.solution(await input), 550);
});
tap.test("part2", async (t) => {
/* t.equal(p2.solution(await sample, 256), 26984457539); */
/* t.equal(p2.solution(await input, 256), 1622533344325); */
});