From 7586d315fd0fd3f5e3ba9000e5459ebbfdf90d1d Mon Sep 17 00:00:00 2001 From: Joshua Seigler Date: Sun, 5 Dec 2021 01:18:53 -0500 Subject: [PATCH] day 5 --- .aocrunner.json | 12 ++++---- README.md | 12 ++++---- src/day05/README.md | 9 ++++++ src/day05/index.js | 67 +++++++++++++++++++++++++++++++++++++++++++++ src/utils/index.js | 9 ++++++ 5 files changed, 97 insertions(+), 12 deletions(-) create mode 100644 src/day05/README.md create mode 100644 src/day05/index.js diff --git a/.aocrunner.json b/.aocrunner.json index a65854d..a543e98 100644 --- a/.aocrunner.json +++ b/.aocrunner.json @@ -67,16 +67,16 @@ }, { "part1": { - "solved": false, - "result": null, + "solved": true, + "result": "6283", "attempts": [], - "time": null + "time": 86.45 }, "part2": { - "solved": false, - "result": null, + "solved": true, + "result": "18864", "attempts": [], - "time": null + "time": 131.26 } }, { diff --git a/README.md b/README.md index 4ee999c..c42eea2 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) @@ -97,9 +97,9 @@ Both parts: 75.85ms ``` Day 05 -Time part 1: - -Time part 2: - -Both parts: - +Time part 1: 86.45ms +Time part 2: 131.26ms +Both parts: 217.70999999999998ms ``` ``` @@ -243,8 +243,8 @@ Both parts: - ``` ``` -Total stars: 8/50 -Total time: 89ms +Total stars: 10/50 +Total time: 306.71ms ``` diff --git a/src/day05/README.md b/src/day05/README.md new file mode 100644 index 0000000..6a720e7 --- /dev/null +++ b/src/day05/README.md @@ -0,0 +1,9 @@ +# 🎄 Advent of Code 2021 - day 5 🎄 + +## Info + +Task description: [link](https://adventofcode.com/2021/day/5) + +## Notes + +... \ No newline at end of file diff --git a/src/day05/index.js b/src/day05/index.js new file mode 100644 index 0000000..db98325 --- /dev/null +++ b/src/day05/index.js @@ -0,0 +1,67 @@ +import run from "aocrunner" +import { sequence } from "../utils/index.js" + +const parseInput = (rawInput) => + rawInput.split`\n`.map((l) => l.split(/ -> |,/).map((x) => +x)) + +const part1 = (rawInput) => { + const input = parseInput(rawInput) + const visited = new Map() + input.forEach(([ax, ay, bx, by]) => { + const dx = Math.sign(bx - ax) + const dy = Math.sign(by - ay) + if (dx == 0 || dy == 0) { + for (let x = ax, y = ay; x != bx + dx || y != by + dy; x += dx, y += dy) { + const key = `${x},${y}` + const value = visited.get(key) || 0 + visited.set(key, value + 1) + } + } + }) + + return [...visited.values()].filter((x) => x > 1).length +} + +const part2 = (rawInput) => { + const input = parseInput(rawInput) + const visited = new Map() + input.forEach(([ax, ay, bx, by]) => { + const dx = Math.sign(bx - ax) + const dy = Math.sign(by - ay) + for (let x = ax, y = ay; x != bx + dx || y != by + dy; x += dx, y += dy) { + const key = `${x},${y}` + const value = visited.get(key) || 0 + visited.set(key, value + 1) + } + }) + + return [...visited.values()].filter((x) => x > 1).length +} + +run({ + part1: { + tests: [ + { + input: `0,9 -> 5,9 +8,0 -> 0,8 +9,4 -> 3,4 +2,2 -> 2,1 +7,0 -> 7,4 +6,4 -> 2,0 +0,9 -> 2,9 +3,4 -> 1,4 +0,0 -> 8,8 +5,5 -> 8,2`, + expected: 5, + }, + ], + solution: part1, + }, + part2: { + tests: [ + // { input: ``, expected: "" }, + ], + solution: part2, + }, + trimTestInputs: true, +}) diff --git a/src/utils/index.js b/src/utils/index.js index c847683..6619010 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -25,3 +25,12 @@ export function transpose(m) { return m[0].map((x, i) => m.map((x) => x[i])) } + +export function sequence(a, b) { + const s = [] + const increment = a < b ? 1 : -1 + for (let i = a; (i += increment); i !== b + increment) { + s.push(i) + } + return s +}