From 992ab32a043d3bf39a28cdf74ff5bcbe3cc49340 Mon Sep 17 00:00:00 2001 From: Joshua Seigler Date: Sat, 14 Dec 2024 00:55:25 -0500 Subject: [PATCH] day 14, fun but strange --- .aocrunner.json | 6 ++-- README.md | 16 ++++----- src/day14/README.md | 9 +++++ src/day14/index.ts | 81 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 101 insertions(+), 11 deletions(-) create mode 100644 src/day14/README.md create mode 100644 src/day14/index.ts diff --git a/.aocrunner.json b/.aocrunner.json index d759564..bd8d8be 100644 --- a/.aocrunner.json +++ b/.aocrunner.json @@ -209,10 +209,10 @@ }, { "part1": { - "solved": false, - "result": null, + "solved": true, + "result": "224554908", "attempts": [], - "time": null + "time": 1.492066 }, "part2": { "solved": false, diff --git a/README.md b/README.md index b0f8859..d592a92 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ [![Day](https://badgen.net/badge/11/%E2%98%85%E2%98%85/green)](src/day11) [![Day](https://badgen.net/badge/12/%E2%98%85%E2%98%85/green)](src/day12) [![Day](https://badgen.net/badge/13/%E2%98%85%E2%98%85/green)](src/day13) -![Day](https://badgen.net/badge/14/%E2%98%86%E2%98%86/gray) +[![Day](https://badgen.net/badge/14/%E2%98%85%E2%98%86/yellow)](src/day14) ![Day](https://badgen.net/badge/15/%E2%98%86%E2%98%86/gray) ![Day](https://badgen.net/badge/16/%E2%98%86%E2%98%86/gray) ![Day](https://badgen.net/badge/17/%E2%98%86%E2%98%86/gray) @@ -153,16 +153,16 @@ Both parts: 387.236ms ``` Day 13 -Time part 1: - -Time part 2: 7.731ms -Both parts: 7.731ms +Time part 1: 1.095ms +Time part 2: 0.818ms +Both parts: 1.913ms ``` ``` Day 14 -Time part 1: - +Time part 1: 1.507ms Time part 2: - -Both parts: - +Both parts: 1.507ms ``` ``` @@ -243,8 +243,8 @@ Both parts: - ``` ``` -Total stars: 26/50 -Total time: 38909.996ms +Total stars: 27/50 +Total time: 38905.685ms ``` diff --git a/src/day14/README.md b/src/day14/README.md new file mode 100644 index 0000000..48883dd --- /dev/null +++ b/src/day14/README.md @@ -0,0 +1,9 @@ +# 🎄 Advent of Code 2024 - day 14 🎄 + +## Info + +Task description: [link](https://adventofcode.com/2024/day/14) + +## Notes + +... \ No newline at end of file diff --git a/src/day14/index.ts b/src/day14/index.ts new file mode 100644 index 0000000..62e3349 --- /dev/null +++ b/src/day14/index.ts @@ -0,0 +1,81 @@ +import run from "aocrunner" + +const parseInput = (rawInput: string) => rawInput.split("\n") +.map((l) => Array.from(l.matchAll(/-?\d+/g)).map(Number)) + +const part1 = (rawInput: string) => { + const input = parseInput(rawInput) + const width = 101 + const height = 103 + let quadrantCounts = [0,0,0,0] // TL, TR, BR, BL + const halfX = (width - 1) / 2 + const halfY = (height - 1) / 2 + input.forEach(([ix, iy, dx, dy]) => { + const destx = (ix + (width + dx) * 100) % width + const desty = (iy + (height + dy) * 100) % height + if (desty === halfY || destx === halfX) { return } + quadrantCounts[ + (desty > halfY ? 2 : 0) + (destx > halfX ? 1 : 0) + ] += 1 + }) + return quadrantCounts.reduce((total, here) => { + return total * here + }, 1) +} + +const part2 = (rawInput: string) => { + (async () => { + const input = parseInput(rawInput) + const width = 101 + const height = 103 + for (let i = 0; i < 20000; i++) { + const canvas: string[][] = [] + for (let y = 0; y < height; y++) { + canvas.push(" ".repeat(width).split('')) + } + input.forEach(([ix, iy, dx, dy]) => { + const destx = (ix + (width + dx) * i) % width + const desty = (iy + (height + dy) * i) % height + canvas[desty][destx] = "#" + }) + if (canvas.some(line => line.join('').includes("##########"))) { + await new Promise(resolve => setTimeout(resolve, 1000)) + console.log(`\nTIME: ${i} seconds\n${canvas.map(line => console.log(line.join(""))).join('\n')}`) + } + } + })() +} + +run({ + part1: { + tests: [ +// { +// input: `p=0,4 v=3,-3 +// p=6,3 v=-1,-3 +// p=10,3 v=-1,2 +// p=2,0 v=2,-1 +// p=0,0 v=1,3 +// p=3,0 v=-2,-2 +// p=7,6 v=-1,-3 +// p=3,0 v=-1,-2 +// p=9,3 v=2,3 +// p=7,3 v=-1,2 +// p=2,4 v=2,-3 +// p=9,5 v=-3,-3`, +// expected: 12, +// }, + ], + solution: part1, + }, + part2: { + tests: [ + // { + // input: ``, + // expected: "", + // }, + ], + solution: part2, + }, + trimTestInputs: true, + onlyTests: false, +})