From d867d69f79173915aa4c0bbb64aac23a032e5d6f Mon Sep 17 00:00:00 2001 From: Alix von Schirp Date: Thu, 12 Dec 2024 00:43:26 +0100 Subject: [PATCH] Day 7 --- Day 07/Part 1/index.ts | 27 +++++++++++++++++++++++++++ Day 07/Part 2/index.ts | 28 ++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 Day 07/Part 1/index.ts create mode 100644 Day 07/Part 2/index.ts diff --git a/Day 07/Part 1/index.ts b/Day 07/Part 1/index.ts new file mode 100644 index 0000000..67c6026 --- /dev/null +++ b/Day 07/Part 1/index.ts @@ -0,0 +1,27 @@ +import fs from 'node:fs'; + +export default function runner(input: string) { + fs.readFile(`./${input}`, 'utf8', (err, data) => { + if (err) throw err; + let sum = 0; + data.split('\n').forEach(line => { + const [result, equators] = line.split(": ") + const factors = (equators??"").split(" ") + if(calculate(parseInt(result??""), factors.map(value => parseInt(value)))) sum += parseInt(result??"") + }) + console.log(sum) + }) +} + +function calculate(result: number, factors: number[]): boolean{ + return math(result, factors, 0, 0); +} + +function math(result: number, factors: number[], index: number, runningTotal: number): boolean { + if(index === factors.length) return result === runningTotal; + + const add = math(result, factors, index+1, runningTotal+(factors[index]??1)) + const mult = math(result, factors, index+1, runningTotal*(factors[index]??1)) + + return add||mult; +} \ No newline at end of file diff --git a/Day 07/Part 2/index.ts b/Day 07/Part 2/index.ts new file mode 100644 index 0000000..c0e681b --- /dev/null +++ b/Day 07/Part 2/index.ts @@ -0,0 +1,28 @@ +import fs from 'node:fs'; + +export default function runner(input: string) { + fs.readFile(`./${input}`, 'utf8', (err, data) => { + if (err) throw err; + let sum = 0; + data.split('\n').forEach(line => { + const [result, equators] = line.split(": ") + const factors = (equators??"").split(" ") + if(calculate(parseInt(result??""), factors.map(value => parseInt(value)))) sum += parseInt(result??"") + }) + console.log(sum) + }) +} + +function calculate(result: number, factors: number[]): boolean{ + return math(result, factors, 0, 0); +} + +function math(result: number, factors: number[], index: number, runningTotal: number): boolean { + if(index === factors.length) return result === runningTotal; + + const add = math(result, factors, index+1, runningTotal+(factors[index]??1)) + const mult = math(result, factors, index+1, runningTotal*(factors[index]??1)) + const concat = math(result, factors, index+1, parseInt(runningTotal + "" + (factors[index]??1))) + + return add||mult||concat; +} \ No newline at end of file