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);