From 22b50b4e1fa41710c63539357286923ddd0c9c53 Mon Sep 17 00:00:00 2001 From: Joshua Seigler Date: Thu, 9 Dec 2021 01:28:48 -0500 Subject: [PATCH] day 9 --- .aocrunner.json | 12 +++---- README.md | 12 +++---- src/day09/README.md | 9 +++++ src/day09/index.js | 83 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 104 insertions(+), 12 deletions(-) create mode 100644 src/day09/README.md create mode 100644 src/day09/index.js diff --git a/.aocrunner.json b/.aocrunner.json index c442bba..27522a4 100644 --- a/.aocrunner.json +++ b/.aocrunner.json @@ -125,16 +125,16 @@ }, { "part1": { - "solved": false, - "result": null, + "solved": true, + "result": "444", "attempts": [], - "time": null + "time": 12.26 }, "part2": { - "solved": false, - "result": null, + "solved": true, + "result": "1168440", "attempts": [], - "time": null + "time": 22.72 } }, { diff --git a/README.md b/README.md index 851366a..5d3c094 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ [![Day](https://badgen.net/badge/06/%E2%98%85%E2%98%85/green)](src/day06) [![Day](https://badgen.net/badge/07/%E2%98%85%E2%98%85/green)](src/day07) [![Day](https://badgen.net/badge/08/%E2%98%85%E2%98%85/green)](src/day08) -![Day](https://badgen.net/badge/09/%E2%98%86%E2%98%86/gray) +[![Day](https://badgen.net/badge/09/%E2%98%85%E2%98%85/green)](src/day09) ![Day](https://badgen.net/badge/10/%E2%98%86%E2%98%86/gray) ![Day](https://badgen.net/badge/11/%E2%98%86%E2%98%86/gray) ![Day](https://badgen.net/badge/12/%E2%98%86%E2%98%86/gray) @@ -125,9 +125,9 @@ Both parts: 19.64ms ``` Day 09 -Time part 1: - -Time part 2: - -Both parts: - +Time part 1: 12.26ms +Time part 2: 22.72ms +Both parts: 34.98ms ``` ``` @@ -243,8 +243,8 @@ Both parts: - ``` ``` -Total stars: 16/50 -Total time: 398.31999999999994ms +Total stars: 18/50 +Total time: 433.29999999999995ms ``` diff --git a/src/day09/README.md b/src/day09/README.md new file mode 100644 index 0000000..bfd70dd --- /dev/null +++ b/src/day09/README.md @@ -0,0 +1,9 @@ +# 🎄 Advent of Code 2021 - day 9 🎄 + +## Info + +Task description: [link](https://adventofcode.com/2021/day/9) + +## Notes + +... \ No newline at end of file diff --git a/src/day09/index.js b/src/day09/index.js new file mode 100644 index 0000000..ab99572 --- /dev/null +++ b/src/day09/index.js @@ -0,0 +1,83 @@ +import run from "aocrunner" + +const parseInput = (rawInput) => + rawInput.trim().split`\n`.map((y) => [...y].map((x) => +x)) + +function risk(x, y, map) { + let base = map[y][x] + if (map[y - 1] && map[y - 1][x] <= base) return undefined + if (map[y + 1] && map[y + 1][x] <= base) return undefined + if (map[y][x - 1] <= base) return undefined + if (map[y][x + 1] <= base) return undefined + return base +} + +const part1 = (rawInput) => { + const input = parseInput(rawInput) + let lowSum = 0 + for (const y in input) { + for (const x in input[y]) { + const r = risk(+x, +y, input) + lowSum += r + 1 || 0 + } + } + return lowSum +} + +const part2 = (rawInput) => { + const input = parseInput(rawInput) + const basinSizes = [] + for (const Y in input) { + for (const X in input[Y]) { + const x = +X, + y = +Y + const r = risk(x, y, input) + if (r !== undefined) { + const basin = [] + function spread(y, x) { + const key = `${y},${x}` + if (input[y][x] === 9 || basin.includes(key)) return + basin.push(key) + if (input[y - 1]) spread(y - 1, x) + if (input[y + 1]) spread(y + 1, x) + if (input[y][x - 1] !== undefined) spread(y, x - 1) + if (input[y][x + 1] !== undefined) spread(y, x + 1) + } + spread(y, x) + basinSizes.push(basin.length) + } + } + } + basinSizes.sort((a, b) => b - a) + return basinSizes[0] * basinSizes[1] * basinSizes[2] +} + +run({ + part1: { + tests: [ + { + input: `2199943210 +3987894921 +9856789892 +8767896789 +9899965678`, + expected: 15, + }, + ], + solution: part1, + }, + part2: { + tests: [ + { + input: `2199943210 +3987894921 +9856789892 +8767896789 +9899965678`, + expected: 1134, + }, + ], + solution: part2, + }, + trimTestInputs: true, +})