expeditaet
Version:
Advent of Code Solutions
48 lines (43 loc) • 1.26 kB
text/typescript
/* eslint-disable @typescript-eslint/no-non-null-assertion */
import { hexToBits } from './model/hex-to-bits.function.js';
import { interpretPacket, isLiteralPacket, type Packet } from './model/packet.interface.js';
import { task } from '@alexaegis/advent-of-code-lib';
import packageJson from '../package.json';
const calculatePacketValue = (packet: Packet): number => {
if (isLiteralPacket(packet)) {
return packet.content;
} else {
const subPacketValues = packet.subPackets.map((subPacket) =>
calculatePacketValue(subPacket),
);
switch (packet.type) {
case 0: {
return subPacketValues.sum();
}
case 1: {
return subPacketValues.product();
}
case 2: {
return subPacketValues.min();
}
case 3: {
return subPacketValues.max();
}
case 5: {
return subPacketValues[0]! > subPacketValues[1]! ? 1 : 0;
}
case 6: {
return subPacketValues[0]! < subPacketValues[1]! ? 1 : 0;
}
case 7: {
return subPacketValues[0] === subPacketValues[1] ? 1 : 0;
}
}
}
};
export const p2 = (input: string): number => {
const bits = hexToBits(input.lines()[0]!);
const packet = interpretPacket(bits);
return calculatePacketValue(packet);
};
await task(p2, packageJson.aoc); // 10185143721112 ~0.26ms