From ee81d62ef8b28c818bb68c3d16870075878d6356 Mon Sep 17 00:00:00 2001 From: Joshua Seigler Date: Thu, 5 Dec 2024 00:27:52 -0500 Subject: [PATCH] day 5, feels nice --- .aocrunner.json | 12 ++--- README.md | 18 +++---- src/day05/README.md | 9 ++++ src/day05/index.ts | 119 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 143 insertions(+), 15 deletions(-) create mode 100644 src/day05/README.md create mode 100644 src/day05/index.ts diff --git a/.aocrunner.json b/.aocrunner.json index 9b9c941..c008653 100644 --- a/.aocrunner.json +++ b/.aocrunner.json @@ -63,16 +63,16 @@ }, { "part1": { - "solved": false, - "result": null, + "solved": true, + "result": "4905", "attempts": [], - "time": null + "time": 29.389645 }, "part2": { - "solved": false, - "result": null, + "solved": true, + "result": "6204", "attempts": [], - "time": null + "time": 54.772924 } }, { diff --git a/README.md b/README.md index 04f02ea..6f7309c 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ [![Day](https://badgen.net/badge/02/%E2%98%85%E2%98%85/green)](src/day02) [![Day](https://badgen.net/badge/03/%E2%98%85%E2%98%85/green)](src/day03) [![Day](https://badgen.net/badge/04/%E2%98%85%E2%98%85/green)](src/day04) -![Day](https://badgen.net/badge/05/%E2%98%86%E2%98%86/gray) +[![Day](https://badgen.net/badge/05/%E2%98%85%E2%98%85/green)](src/day05) ![Day](https://badgen.net/badge/06/%E2%98%86%E2%98%86/gray) ![Day](https://badgen.net/badge/07/%E2%98%86%E2%98%86/gray) ![Day](https://badgen.net/badge/08/%E2%98%86%E2%98%86/gray) @@ -90,16 +90,16 @@ Both parts: 2.477ms ``` Day 04 -Time part 1: 327.703ms -Time part 2: 201.225ms -Both parts: 528.928ms +Time part 1: 67.709ms +Time part 2: 182.986ms +Both parts: 250.695ms ``` ``` Day 05 -Time part 1: - -Time part 2: - -Both parts: - +Time part 1: 29.068ms +Time part 2: 53.891ms +Both parts: 82.959ms ``` ``` @@ -243,8 +243,8 @@ Both parts: - ``` ``` -Total stars: 8/50 -Total time: 537.288ms +Total stars: 10/50 +Total time: 342.015ms ``` diff --git a/src/day05/README.md b/src/day05/README.md new file mode 100644 index 0000000..79e0c24 --- /dev/null +++ b/src/day05/README.md @@ -0,0 +1,9 @@ +# 🎄 Advent of Code 2024 - day 5 🎄 + +## Info + +Task description: [link](https://adventofcode.com/2024/day/5) + +## Notes + +... \ No newline at end of file diff --git a/src/day05/index.ts b/src/day05/index.ts new file mode 100644 index 0000000..e9271e5 --- /dev/null +++ b/src/day05/index.ts @@ -0,0 +1,119 @@ +import run from "aocrunner" + +const parseInput = (rawInput: string) => { + const [a,b] = rawInput.split('\n\n') + return { + rules: a.split('\n').map(rule => rule.split('|').map(Number)), + updates: b.split('\n').map(update => update.split(',').map(Number)) + } +} + +const part1 = (rawInput: string) => { + const {rules, updates} = parseInput(rawInput) + return updates.reduce((total, update) => { + let seen: number[] = [] + for (const page of update) { + if (rules.some(rule => seen.includes(rule[1]) && rule[0] === page)) { + return total + } + seen.push(page) + } + return total + seen[Math.floor(seen.length / 2)] + }, 0) +} + +const part2 = (rawInput: string) => { + const {rules, updates} = parseInput(rawInput) + return updates.reduce((total, update) => { + let seen: number[] = [] + for (const page of update) { + if (rules.some(rule => seen.includes(rule[1]) && rule[0] === page)) { + // needs fixing + const sortedUpdate = update.sort((p1,p2) => { + return rules.some(rule => rule[0] === p1 && rule[1] === p2) ? -1 : 1 + }) + return total + update[Math.floor(update.length / 2)] + } + seen.push(page) + } + // it's fine + return total + }, 0) +} + +run({ + part1: { + tests: [ + { + input: `47|53 +97|13 +97|61 +97|47 +75|29 +61|13 +75|53 +29|13 +97|29 +53|29 +61|53 +97|53 +61|29 +47|13 +75|47 +97|75 +47|61 +75|61 +47|29 +75|13 +53|13 + +75,47,61,53,29 +97,61,53,29,13 +75,29,13 +75,97,47,61,53 +61,13,29 +97,13,75,29,47`, + expected: 143, + }, + ], + solution: part1, + }, + part2: { + tests: [ + { + input: `47|53 +97|13 +97|61 +97|47 +75|29 +61|13 +75|53 +29|13 +97|29 +53|29 +61|53 +97|53 +61|29 +47|13 +75|47 +97|75 +47|61 +75|61 +47|29 +75|13 +53|13 + +75,47,61,53,29 +97,61,53,29,13 +75,29,13 +75,97,47,61,53 +61,13,29 +97,13,75,29,47`, + expected: 123, + }, + ], + solution: part2, + }, + trimTestInputs: true, + onlyTests: false, +})