expeditaet
Version:
Advent of Code Solutions
38 lines (32 loc) • 994 B
text/typescript
import { task } from '@alexaegis/advent-of-code-lib';
import packageJson from '../package.json';
import { Network, NETWORK_SIZE } from './network.class.js';
import type { Packet } from './packet.interface.js';
import { parse } from './parse.js';
export const p2 = (input: string): number => {
const tape = parse(input);
let result: number | undefined;
let nat: Packet | undefined;
const natLog = new Set<number>();
const { network, io } = new Network(tape, (n: Packet) => (nat = n));
while (!result) {
let isIdle = true;
// TODO: Find a better way to determine idleness
for (let r = 0; r < NETWORK_SIZE / 2; r++) {
isIdle = ![...network.entries()].some(
([, [, stepper]]) => stepper.next().value !== undefined,
);
}
if (isIdle && nat) {
if (natLog.has(nat.y)) {
result = nat.y;
} else {
natLog.add(nat.y);
}
nat.destination = 0;
io.get(nat.destination)?.push(nat);
}
}
return result;
};
await task(p2, packageJson.aoc); // 19216 ~146ms