import * as R from "remeda"; import { readFile } from "../05/part1.js"; const readInput = (...args) => R.pipe( readFile(...args), (lines) => lines.split("\n\n"), R.compact, // remove last line R.map((block) => block.split("\n").map((line) => eval(line))) ); export const puzzleInput = readInput(import.meta.url, "input"); export const sample = readInput(import.meta.url, "sample"); export function isLessThan(x, y) { if ([x, y].every(R.isNumber)) return x < y ? -1 : x == y ? 0 : 1; if ([x, y].every(R.isArray)) { for (const [a, b] of R.zip(x, y)) { const res = isLessThan(a, b); if (res !== 0) return res; } if (x.length === y.length) return 0; return x.length < y.length ? -1 : 1; } return isLessThan(...[x, y].map((z) => (R.isNumber(z) ? [z] : z))); } const passthru = (x) => (arg) => { x(arg); return arg; }; export default R.createPipe( R.map(([x, y]) => isLessThan(x, y)), (results) => results.map((value, index) => ({ value, index: index + 1 })), R.filter(({ value }) => value !== 1), R.map(R.prop("index")), (results) => results.reduce((a, b) => a + b) );