From 64bea87901f13bba8c2d8e9bc4c9769353ead186 Mon Sep 17 00:00:00 2001 From: Joshua Seigler Date: Tue, 7 Dec 2021 00:55:10 -0500 Subject: [PATCH] day 7 --- .aocrunner.json | 16 +++++++++------- README.md | 12 ++++++------ src/day07/README.md | 9 +++++++++ src/day07/index.js | 42 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 66 insertions(+), 13 deletions(-) create mode 100644 src/day07/README.md create mode 100644 src/day07/index.js diff --git a/.aocrunner.json b/.aocrunner.json index aa06d85..8c053b8 100644 --- a/.aocrunner.json +++ b/.aocrunner.json @@ -95,16 +95,18 @@ }, { "part1": { - "solved": false, - "result": null, + "solved": true, + "result": "345035", "attempts": [], - "time": null + "time": 0.71 }, "part2": { - "solved": false, - "result": null, - "attempts": [], - "time": null + "solved": true, + "result": "97038163", + "attempts": [ + "97038219" + ], + "time": 46.18 } }, { diff --git a/README.md b/README.md index 6e82c40..1230f68 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ [![Day](https://badgen.net/badge/04/%E2%98%85%E2%98%85/green)](src/day04) [![Day](https://badgen.net/badge/05/%E2%98%85%E2%98%85/green)](src/day05) [![Day](https://badgen.net/badge/06/%E2%98%85%E2%98%85/green)](src/day06) -![Day](https://badgen.net/badge/07/%E2%98%86%E2%98%86/gray) +[![Day](https://badgen.net/badge/07/%E2%98%85%E2%98%85/green)](src/day07) ![Day](https://badgen.net/badge/08/%E2%98%86%E2%98%86/gray) ![Day](https://badgen.net/badge/09/%E2%98%86%E2%98%86/gray) ![Day](https://badgen.net/badge/10/%E2%98%86%E2%98%86/gray) @@ -111,9 +111,9 @@ Both parts: 25.08ms ``` Day 07 -Time part 1: - -Time part 2: - -Both parts: - +Time part 1: 0.71ms +Time part 2: 46.18ms +Both parts: 46.89ms ``` ``` @@ -243,8 +243,8 @@ Both parts: - ``` ``` -Total stars: 12/50 -Total time: 331.78999999999996ms +Total stars: 14/50 +Total time: 378.67999999999995ms ``` diff --git a/src/day07/README.md b/src/day07/README.md new file mode 100644 index 0000000..c3c10e8 --- /dev/null +++ b/src/day07/README.md @@ -0,0 +1,9 @@ +# 🎄 Advent of Code 2021 - day 7 🎄 + +## Info + +Task description: [link](https://adventofcode.com/2021/day/7) + +## Notes + +... \ No newline at end of file diff --git a/src/day07/index.js b/src/day07/index.js new file mode 100644 index 0000000..60247b3 --- /dev/null +++ b/src/day07/index.js @@ -0,0 +1,42 @@ +import run from "aocrunner" + +const parseInput = (rawInput) => + rawInput.trim().split`,`.map((x) => +x).sort((a, b) => a - b) + +const part1 = (rawInput) => { + const input = parseInput(rawInput) + const median = input[Math.floor(input.length / 2)] + return input.reduce((acc, cur) => acc + Math.abs(cur - median), 0) +} + +const part2 = (rawInput) => { + const input = parseInput(rawInput) + const min = input[0], + max = input[input.length - 1] + const gas = (position) => + input.reduce( + (acc, cur) => + acc + ((1 + Math.abs(cur - position)) * Math.abs(cur - position)) / 2, + 0, + ) + let bestGas = Infinity + for (let pos = min; pos <= max; pos++) { + const thisGas = gas(pos) + if (thisGas < bestGas) { + bestGas = thisGas + } + } + return bestGas +} + +run({ + part1: { + tests: [{ input: `16,1,2,0,4,2,7,1,2,14`, expected: 37 }], + solution: part1, + }, + part2: { + tests: [{ input: `16,1,2,0,4,2,7,1,2,14`, expected: 168 }], + solution: part2, + }, + trimTestInputs: true, +})