UNPKG

expeditaet

Version:
40 lines (34 loc) 1.29 kB
import { split, task } from '@alexaegis/advent-of-code-lib'; import type { Vec2String } from '@alexaegis/advent-of-code-lib/model'; import { interpret } from './interpret.function.js'; import type { Claim } from './model/claim.interface.js'; import packageJson from '../package.json'; export const p2 = (input: string): number | undefined => { const fabric: Map<Vec2String, number[]> = new Map<Vec2String, number[]>(); // Contains each claim for each coordinate const claims: Claim[] = []; for (const line of split(input)) { const claim = interpret(line); claims.push(claim); for (let i = claim.starting.x; i < claim.starting.x + claim.size.x; i++) { for (let j = claim.starting.y; j < claim.starting.y + claim.size.y; j++) { const coordKey: Vec2String = `${i},${j}`; const c: number[] = fabric.get(coordKey) ?? []; c.push(claim.id); fabric.set(coordKey, c); } } } for (const claim of claims) { let good = true; for (let i = claim.starting.x; i < claim.starting.x + claim.size.x; i++) { for (let j = claim.starting.y; j < claim.starting.y + claim.size.y; j++) { good = good && (fabric.get(`${i},${j}`) ?? []).length === 1; } } if (good) { return claim.id; } } return undefined; }; await task(p2, packageJson.aoc); // 382 ~234ms