aoc-2024/day2.ts
2024-12-04 13:49:33 +11:00

38 lines
No EOL
1 KiB
TypeScript

import fs from "node:fs";
const input = fs.readFileSync("inputs/day2").toString();
const rows = input.split("\n").filter(Boolean);
function safe_levels(_row: number[]) {
const row = [..._row];
while (row.length > 1) {
const diff = row[1] - row[0];
if (diff > 3 || diff < 1) return false;
row.shift();
}
return true;
}
function puzzle1() {
return rows.map((row) => row.split(/\s+/g).map(i => +i))
.filter(row => safe_levels(row) || safe_levels(row.toReversed())).length;
}
console.log("Puzzle 1", puzzle1());
function dampen_lists(row: number[]) {
const rows: number[][] = new Array(row.length).fill(row).map((_row, i) => {
const row = [..._row];
row.splice(i, 1);
return row;
});
return [row, ...rows].filter(safe_levels).length > 0;
}
function puzzle2() {
return rows.map((row) => row.split(/\s+/g).map(i => +i))
.filter(row => dampen_lists(row) || dampen_lists(row.toReversed())).length;
}
console.log("Puzzle 2", puzzle2());