Solve 2024-07

This commit is contained in:
2024-12-07 23:58:46 +01:00
parent 62baa825f2
commit 3bcb52f5a0
5 changed files with 102 additions and 2 deletions
+59
View File
@@ -0,0 +1,59 @@
import { sumBy } from '../../utils/array.ts';
export function solveFirst(input: string): number {
const regex = /^(\d*): (.*)$/gm;
const match = input.matchAll(regex);
const rows = Array.from(match, (m) => ({
sum: Number(m[1]),
digits: m[2].split(' ').map((n) => Number(n))
}));
const possible = rows.filter((r) => {
for (let t = 0; t < Math.pow(2, r.digits.length - 1); t++) {
const sol = r.digits.reduce((sum, curr, i) =>
evalTry(t, i, sum + curr, sum * curr)
);
if (sol === r.sum) {
return true;
}
}
return false;
});
// console.log(possible);
return sumBy(possible, (p) => p.sum);
}
export function evalTry<T>(t: number, index: number, ...choices: T[]): T {
const base = choices.length;
const choice = Math.max(0, Math.floor(t / Math.pow(base, index - 1)) % base);
return choices[choice];
}
export function solveSecond(input: string): number {
const regex = /^(\d*): (.*)$/gm;
const match = input.matchAll(regex);
const rows = Array.from(match, (m) => ({
sum: Number(m[1]),
digits: m[2].split(' ').map((n) => Number(n))
}));
const possible = rows.filter((r) => {
for (let t = 0; t < Math.pow(3, r.digits.length - 1); t++) {
const sol = r.digits.reduce((sum, curr, i) =>
evalTry(t, i, sum * curr, sum + curr, Number(`${sum}${curr}`))
);
if (sol === r.sum) {
return true;
}
}
return false;
});
// console.log(possible);
return sumBy(possible, (p) => p.sum);
}