From 653e4a7b3ea14b438afa0a4f4f43edc1a88419fd Mon Sep 17 00:00:00 2001 From: Joshua Seigler Date: Thu, 19 Dec 2024 00:22:40 -0500 Subject: [PATCH] day 19, my fastest times yet! --- .aocrunner.json | 12 +++---- README.md | 18 +++++----- src/day19/README.md | 9 +++++ src/day19/index.ts | 85 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 109 insertions(+), 15 deletions(-) create mode 100644 src/day19/README.md create mode 100644 src/day19/index.ts diff --git a/.aocrunner.json b/.aocrunner.json index 43c6b9a..0f26a73 100644 --- a/.aocrunner.json +++ b/.aocrunner.json @@ -286,16 +286,16 @@ }, { "part1": { - "solved": false, - "result": null, + "solved": true, + "result": "371", "attempts": [], - "time": null + "time": 1.906905 }, "part2": { - "solved": false, - "result": null, + "solved": true, + "result": "650354687260341", "attempts": [], - "time": null + "time": 171.177121 } }, { diff --git a/README.md b/README.md index f383dcc..c88bd37 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ [![Day](https://badgen.net/badge/16/%E2%98%85%E2%98%85/green)](src/day16) [![Day](https://badgen.net/badge/17/%E2%98%85%E2%98%85/green)](src/day17) [![Day](https://badgen.net/badge/18/%E2%98%85%E2%98%85/green)](src/day18) -![Day](https://badgen.net/badge/19/%E2%98%86%E2%98%86/gray) +[![Day](https://badgen.net/badge/19/%E2%98%85%E2%98%85/green)](src/day19) ![Day](https://badgen.net/badge/20/%E2%98%86%E2%98%86/gray) ![Day](https://badgen.net/badge/21/%E2%98%86%E2%98%86/gray) ![Day](https://badgen.net/badge/22/%E2%98%86%E2%98%86/gray) @@ -188,16 +188,16 @@ Both parts: 8772.994ms ``` Day 18 -Time part 1: 26.466ms -Time part 2: 1115.347ms -Both parts: 1141.812ms +Time part 1: 27.726ms +Time part 2: 15841.686ms +Both parts: 15869.412ms ``` ``` Day 19 -Time part 1: - -Time part 2: - -Both parts: - +Time part 1: 1.907ms +Time part 2: 171.177ms +Both parts: 173.084ms ``` ``` @@ -243,8 +243,8 @@ Both parts: - ``` ``` -Total stars: 36/50 -Total time: 161581.562ms +Total stars: 38/50 +Total time: 176482.246ms ``` diff --git a/src/day19/README.md b/src/day19/README.md new file mode 100644 index 0000000..cf6ca65 --- /dev/null +++ b/src/day19/README.md @@ -0,0 +1,9 @@ +# 🎄 Advent of Code 2024 - day 19 🎄 + +## Info + +Task description: [link](https://adventofcode.com/2024/day/19) + +## Notes + +... \ No newline at end of file diff --git a/src/day19/index.ts b/src/day19/index.ts new file mode 100644 index 0000000..acc2627 --- /dev/null +++ b/src/day19/index.ts @@ -0,0 +1,85 @@ +import run from "aocrunner" + +const parseInput = (rawInput: string) => { + const [a,b] = rawInput.split('\n\n') + const towels = a.split(', ') + const patterns = b.split('\n') + return { + towels, + patterns, + } +} + +const part1 = (rawInput: string) => { + const {towels, patterns} = parseInput(rawInput) + const reg = new RegExp(`^(${towels.join('|')})+$`) + return patterns.reduce((total, pattern) => { + return total + (reg.test(pattern) ? 1 : 0) + }, 0) +} + +const part2 = (rawInput: string) => { + const {towels, patterns} = parseInput(rawInput) + return patterns.reduce((total, pattern) => { + const cache = new Map() + const ways = (index: number) => { + if (cache.has(index)) { + return cache.get(index) + } + if (index === pattern.length) { + cache.set(index, 1) + return 1 + } + const ans = towels.reduce((total2, t) => { + if (pattern.slice(index,index+t.length) === t) { + return total2 + ways(index + t.length) + } + return total2 + }, 0) + cache.set(index, ans) + return ans + } + return total + ways(0) + }, 0) +} + +run({ + part1: { + tests: [ + { + input: `r, wr, b, g, bwu, rb, gb, br + +brwrr +bggr +gbbr +rrbgbr +ubwu +bwurrg +brgr +bbrgwb`, + expected: 6, + }, + ], + solution: part1, + }, + part2: { + tests: [ + { + input: `r, wr, b, g, bwu, rb, gb, br + +brwrr +bggr +gbbr +rrbgbr +ubwu +bwurrg +brgr +bbrgwb`, + expected: 16, + }, + ], + solution: part2, + }, + trimTestInputs: true, + onlyTests: false, +})