commit 8364bcdfff976e42b523f75645fb2e8fc708c165
parent 695babcefe9984276a345c525fc4317d6d37d281
Author: finwo <finwo@pm.me>
Date: Tue, 30 Dec 2025 22:08:34 +0100
Completed 2025/11
Diffstat:
5 files changed, 106 insertions(+), 0 deletions(-)
diff --git a/2025/11/example_1.txt b/2025/11/example_1.txt
@@ -0,0 +1,10 @@
+aaa: you hhh
+you: bbb ccc
+bbb: ddd eee
+ccc: ddd eee fff
+ddd: ggg
+eee: out
+fff: out
+ggg: out
+hhh: ccc fff iii
+iii: out
diff --git a/2025/11/example_2.txt b/2025/11/example_2.txt
@@ -0,0 +1,14 @@
+svr: aaa bbb
+aaa: fft
+fft: ccc
+bbb: tty
+tty: ccc
+ccc: ddd eee
+ddd: hub
+hub: fff
+eee: dac
+dac: fff
+fff: ggg hhh
+ggg: out
+hhh: out
+
diff --git a/2025/11/index.js b/2025/11/index.js
@@ -0,0 +1,59 @@
+#!/usr/bin/env node
+
+const fs = require('node:fs');
+
+// Parse input into something digestable
+const input = fs
+ .readFileSync('input', 'utf-8')
+ .split('\r\n').join('\n')
+ .split('\r').join('\n')
+ .split('\n')
+ .filter(e => e)
+ .map(line => {
+ const parts = line.split(': ');
+ const outputs = parts.pop().split(' ');
+ return {
+ key: parts.shift(),
+ outputs,
+ }
+ });
+
+
+function finder(map, known) {
+ const queue = [...map];
+ let idle = 0;
+ outer: while(queue.length) {
+ if (idle > (queue.length*2)) break;
+ const entry = queue.shift();
+ if (entry.key in known) continue;
+ for(const output of entry.outputs) {
+ if (!(output in known)) {
+ queue.push(entry);
+ idle++;
+ continue outer;
+ }
+ }
+ idle = 0;
+ known[entry.key] = entry.outputs.reduce((r,key)=>r+known[key],0);
+ }
+ return known;
+}
+
+const part1_map = finder(input, { out: 1 });
+const part1 = part1_map.you;
+process.stdout.write(`------[ Part 1: ${part1} ]------\n`);
+
+// const part2_dac_fft = finder(input, { fft: 1, out: 0 });
+
+const part2_svr_fft = finder(input, { fft: 1, out: 0 });
+const part2_fft_dac = finder(input, { dac: 1, out: 0 });
+const part2_dac_out = finder(input, { out: 1 });
+
+// console.log({
+// svr_fft: part2_svr_fft.svr,
+// fft_dac: part2_fft_dac.fft,
+// dac_out: part2_dac_out.dac,
+// });
+
+const part2 = part2_svr_fft.svr * part2_fft_dac.fft * part2_dac_out.dac;
+process.stdout.write(`------[ Part 2: ${part2} ]------\n`);
diff --git a/2025/11/package-lock.json b/2025/11/package-lock.json
@@ -0,0 +1,18 @@
+{
+ "name": "11",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "dependencies": {
+ "js-solver": "^0.0.2"
+ }
+ },
+ "node_modules/js-solver": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/js-solver/-/js-solver-0.0.2.tgz",
+ "integrity": "sha512-6ELx/9Q4gALa2lomVu9SD1CpmS2IQdbweLawgE6gyx96bSodkDb6Y+hcxq30OX4hxKSCpBp6nXnjOt0WVG6+Kw==",
+ "license": "BSD"
+ }
+ }
+}
diff --git a/2025/11/package.json b/2025/11/package.json
@@ -0,0 +1,5 @@
+{
+ "dependencies": {
+ "js-solver": "^0.0.2"
+ }
+}