Solve 2025-06
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user