From f69f1e8deb000d003917fea82f4e5066a63337f4 Mon Sep 17 00:00:00 2001 From: David Ashby Date: Sat, 7 Dec 2024 14:05:30 -0700 Subject: [PATCH] 574 s on part 2, but it's tractable at least --- 07/index.ts | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/07/index.ts b/07/index.ts index 2028b6a..9bd3757 100644 --- a/07/index.ts +++ b/07/index.ts @@ -9,8 +9,23 @@ const data = fs.readFileSync( ); const doubler = (t: Array, c: number) => [...t, c, c]; +// cut off the triplication if we've already outgrown the target +const tripler = (total: number) => (t: Array, c: number) => + total < c ? t : [...t, c, c, c]; + const permute = (curr: number) => (v: number, i: number) => i % 2 === 0 ? v * curr : v + curr; +const permuteHarder = + (curr: number) => + (v: number, i: number): number => { + if (i % 3 === 0) { + return v * curr; + } else if (i % 3 === 1) { + return v + curr; + } else { + return parseInt(v.toString() + curr.toString(), 10); + } + }; let timer = now.instant(); console.log( @@ -42,6 +57,29 @@ console.log( timer = now.instant(); console.log( "part two:", - data.split("\n").slice(0, -1), + data + .split("\n") + .slice(0, -1) + .reduce((coll, curr) => { + // there's probably a cleaner way to do this + let [stringtotal, inputs] = curr.split(": "); + let total = parseInt(stringtotal, 10); + console.log(curr); + const res = inputs + .split(" ") + .map((v) => parseInt(v, 10)) + .reduce((coll, curr, i) => { + if (i === 0) { + return [curr]; + } + return coll + .reduce(tripler(total), [] as Array) + .map(permuteHarder(curr)); + }, [] as Array); + if (res.includes(total)) { + return coll + total; + } + return coll; + }, 0), printTime(now.instant().since(timer)) );