Files
2025-12-06 12:46:50 +01:00

54 lines
1.2 KiB
TypeScript

import { multArray, sumArray } from '../../utils/array.ts';
function sumOrMultArray(op: string, nums: number[]) {
if (op === '*') {
return multArray(nums);
}
return sumArray(nums);
}
export function solveFirst(input: string): number {
const rows = input.split('\n');
const ops = rows.splice(-1)[0].replaceAll(' ', '').split('');
const parsed = rows.map((r) =>
Array.from(r.matchAll(/(\d+)/g), (m) => m.slice(1).map(Number)).flat()
);
return ops.reduce(
(s, op, i) =>
s +
sumOrMultArray(
op,
parsed.map((p) => p[i])
),
0
);
}
export function solveSecond(input: string): number {
const rows = input.split('\n');
const longestRow = Math.max(...rows.map((r) => r.length));
const ops = rows.splice(-1)[0];
const cache: number[] = [];
let lastOp = '';
let sum = 0;
for (let i = 0; i < longestRow; i++) {
if (ops[i] === '*' || ops[i] === '+') {
sum += sumOrMultArray(lastOp, cache);
cache.length = 0;
lastOp = ops[i];
}
const digits = parseInt(rows.map((r) => r[i]).join(''));
if (!isNaN(digits)) {
cache.push(Number(digits));
}
}
sum += sumOrMultArray(lastOp, cache);
return sum;
}