Solve 2025-11

This commit is contained in:
2025-12-11 13:21:56 +01:00
parent 204e42236e
commit 3e3806c1b9
4 changed files with 104 additions and 0 deletions
+7
View File
@@ -0,0 +1,7 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="2025-11" type="BunRunConfiguration">
<option name="program" value="2025/11/run.ts" />
<option name="workingDirectory" value="$PROJECT_DIR$" />
<method v="2" />
</configuration>
</component>
+34
View File
@@ -0,0 +1,34 @@
import { describe, expect, it } from 'bun:test';
import { solveFirst, solveSecond } from './index.ts';
describe('2025-11', () => {
it('first', () => {
const testInput = `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`;
expect(solveFirst(testInput)).toBe(5);
});
it('second', () => {
const testInput = `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`;
expect(solveSecond(testInput)).toBe(2);
});
});
+51
View File
@@ -0,0 +1,51 @@
import { sumArray } from '../../utils/array.ts';
function parseInput(input: string) {
return input.split('\n').map((row) => {
const [from, _to] = row.split(': ');
return { from, to: _to.split(' ') };
});
}
function dfs(
start: string,
target: string,
graph: ReturnType<typeof parseInput>,
memo: Map<string, number> = new Map<string, number>()
) {
if (start === target) {
return 1;
}
if (memo.has(start)) {
return memo.get(start)!;
}
const val = sumArray(
graph
.find((r) => r.from === start)
?.to?.map((to) => dfs(to, target, graph, memo)) || [0]
);
memo.set(start, val);
return val;
}
export function solveFirst(input: string): number {
const rows = parseInput(input);
return dfs('you', 'out', rows);
}
export function solveSecond(input: string): number {
const rows = parseInput(input);
const svr_fft = dfs('svr', 'fft', rows);
const fft_dac = dfs('fft', 'dac', rows);
const dac_out = dfs('dac', 'out', rows);
const svr_dac = dfs('svr', 'dac', rows);
const dac_fft = dfs('dac', 'fft', rows);
const fft_out = dfs('fft', 'out', rows);
return svr_fft * fft_dac * dac_out + svr_dac * dac_fft * fft_out;
}
+12
View File
@@ -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);