advent-of-code

Entries to advent of code, multiple years
git clone git://git.finwo.net/misc/advent-of-code
Log | Files | Refs

commit 8364bcdfff976e42b523f75645fb2e8fc708c165
parent 695babcefe9984276a345c525fc4317d6d37d281
Author: finwo <finwo@pm.me>
Date:   Tue, 30 Dec 2025 22:08:34 +0100

Completed 2025/11

Diffstat:
A2025/11/example_1.txt | 10++++++++++
A2025/11/example_2.txt | 14++++++++++++++
A2025/11/index.js | 59+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A2025/11/package-lock.json | 18++++++++++++++++++
A2025/11/package.json | 5+++++
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" + } +}