UNPKG

expeditaet

Version:
44 lines (38 loc) 1.18 kB
/* eslint-disable @typescript-eslint/no-non-null-assertion */ import { split, task } from '@alexaegis/advent-of-code-lib'; import { sum } from '@alexaegis/advent-of-code-lib/math'; import packageJson from '../package.json'; export const calcSegment = (input: string[]): string => { let currentOperator = '+'; let i = 2; while (input.length > 1) { i = i % input.length; if (!input.some((inp) => inp === '(' || inp === ')' || inp === '+')) { currentOperator = '*'; } if ( /^\d+$/.test(input[i - 2]!) && input[i - 1] === currentOperator && /^\d+$/.test(input[i]!) ) { input[i - 2] = eval(`${input[i - 2]}${input[i - 1]}${input[i]}`) as string; input.splice(i - 1, 2); i = i - 2; } if (input[i] === '(') { const segment = input.cutSubSegment(['(', ')'], i); if (segment) { const r = calcSegment(segment); input.splice(i, 0, r); // Splice the result back i--; } } i++; } return input[0]!; }; export const p2 = (input: string): number => split(input) .map((line) => Number.parseInt(calcSegment([...line.replaceAll(' ', '')]), 10)) .reduce(sum, 0); await task(p2, packageJson.aoc); // 297139939002972 ~262.85ms