expeditaet
Version:
Advent of Code Solutions
40 lines (34 loc) • 1.29 kB
text/typescript
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