From 6fbb902b3244a4ca0568d1fcc29605067f38688c Mon Sep 17 00:00:00 2001 From: Pascal Syma Date: Sat, 6 Dec 2025 12:46:50 +0100 Subject: [PATCH] Solve 2025-06 --- 2025/06/2025-06.run.xml | 7 ++++++ 2025/06/index.test.ts | 15 ++++++++++++ 2025/06/index.ts | 53 +++++++++++++++++++++++++++++++++++++++++ 2025/06/run.ts | 12 ++++++++++ 4 files changed, 87 insertions(+) create mode 100644 2025/06/2025-06.run.xml create mode 100644 2025/06/index.test.ts create mode 100644 2025/06/index.ts create mode 100644 2025/06/run.ts diff --git a/2025/06/2025-06.run.xml b/2025/06/2025-06.run.xml new file mode 100644 index 0000000..4f84798 --- /dev/null +++ b/2025/06/2025-06.run.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/2025/06/index.test.ts b/2025/06/index.test.ts new file mode 100644 index 0000000..3080ffa --- /dev/null +++ b/2025/06/index.test.ts @@ -0,0 +1,15 @@ +import { describe, expect, it } from 'bun:test'; +import { solveFirst, solveSecond } from './index.ts'; + +describe('2025-06', () => { + const testInput = `123 328 51 64 + 45 64 387 23 + 6 98 215 314 +* + * + `; + it('first', () => { + expect(solveFirst(testInput)).toBe(4277556); + }); + it('second', () => { + expect(solveSecond(testInput)).toBe(3263827); + }); +}); diff --git a/2025/06/index.ts b/2025/06/index.ts new file mode 100644 index 0000000..edede1c --- /dev/null +++ b/2025/06/index.ts @@ -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; +} diff --git a/2025/06/run.ts b/2025/06/run.ts new file mode 100644 index 0000000..88783cd --- /dev/null +++ b/2025/06/run.ts @@ -0,0 +1,12 @@ +import { join } from 'path'; +import { solveFirst, solveSecond } from './index.ts'; + +const input = await Bun.file(join(__dirname, 'input.txt')).text(); + +const firstAnswer = solveFirst(input); + +console.log(firstAnswer); + +const secondAnswer = solveSecond(input); + +console.log(secondAnswer);