From 433321cd504bbed09e973aecc7f538e16df42cc3 Mon Sep 17 00:00:00 2001 From: Joshua Seigler Date: Sat, 7 Dec 2024 00:47:23 -0500 Subject: [PATCH] day 7 tidier --- .aocrunner.json | 4 ++-- src/day07/index.ts | 37 ++++++++++--------------------------- 2 files changed, 12 insertions(+), 29 deletions(-) diff --git a/.aocrunner.json b/.aocrunner.json index dbaf706..392ef73 100644 --- a/.aocrunner.json +++ b/.aocrunner.json @@ -96,13 +96,13 @@ "solved": true, "result": "12553187650171", "attempts": [], - "time": 21.47319 + "time": 23.011534 }, "part2": { "solved": true, "result": "96779702119491", "attempts": [], - "time": 782.404856 + "time": 599.068573 } }, { diff --git a/src/day07/index.ts b/src/day07/index.ts index 1d8957f..a31f750 100644 --- a/src/day07/index.ts +++ b/src/day07/index.ts @@ -3,18 +3,13 @@ import run from "aocrunner" const parseInput = (rawInput: string) => rawInput.split("\n").map((line) => line.split(/[: ]+/).map(Number)) -const part1 = (rawInput: string) => { - const input = parseInput(rawInput) - +const solve = (rawInput: string, isP2?: boolean) => { + const input = rawInput.split('\n').map(l => l.split(/[^\d]+/).map(Number)) return input.reduce((total, [target, ...values]) => { - const operators = [(a,b) => a * b, (a,b) => a + b] + const operators = [(a,b) => a * b, (a,b) => a + b, ...(isP2 ? [(a,b) => Number(`${a}${b}`)] : [])] const evaluate = (numbers: number[]) => { - if (numbers[0] > target) { - return false - } - if (numbers.length === 1) { - return numbers[0] === target - } + if (numbers[0] > target) return false + if (numbers.length === 1) return numbers[0] === target for (const op of operators) { if (evaluate([op(numbers[0], numbers[1]), ...numbers.slice(2)])) { return true } } @@ -23,24 +18,12 @@ const part1 = (rawInput: string) => { }, 0) } -const part2 = (rawInput: string) => { - const input = parseInput(rawInput) +const part1 = (rawInput: string) => { + return solve(rawInput, false) +} - return input.reduce((total, [target, ...values]) => { - const operators = [(a,b) => a * b, (a,b) => a + b, (a,b) => Number(`${a}${b}`)] - const evaluate = (numbers: number[]) => { - if (numbers[0] > target) { - return false - } - if (numbers.length === 1) { - return numbers[0] === target - } - for (const op of operators) { - if (evaluate([op(numbers[0], numbers[1]), ...numbers.slice(2)])) { return true } - } - } - return total + (evaluate(values) ? target : 0) - }, 0) +const part2 = (rawInput: string) => { + return solve(rawInput, true) } run({