diff --git a/.aocrunner.json b/.aocrunner.json index 39fe576..1680657 100644 --- a/.aocrunner.json +++ b/.aocrunner.json @@ -39,16 +39,16 @@ }, { "part1": { - "solved": false, - "result": null, + "solved": true, + "result": "2498354", "attempts": [], - "time": null + "time": 1.68 }, "part2": { - "solved": false, - "result": null, + "solved": true, + "result": "3277956", "attempts": [], - "time": null + "time": 5.61 } }, { diff --git a/README.md b/README.md index 4f6e886..ab8b8cd 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ [![Day](https://badgen.net/badge/01/%E2%98%85%E2%98%85/green)](src/day01) [![Day](https://badgen.net/badge/02/%E2%98%85%E2%98%85/green)](src/day02) -![Day](https://badgen.net/badge/03/%E2%98%86%E2%98%86/gray) +[![Day](https://badgen.net/badge/03/%E2%98%85%E2%98%85/green)](src/day03) ![Day](https://badgen.net/badge/04/%E2%98%86%E2%98%86/gray) ![Day](https://badgen.net/badge/05/%E2%98%86%E2%98%86/gray) ![Day](https://badgen.net/badge/06/%E2%98%86%E2%98%86/gray) @@ -76,16 +76,16 @@ Both parts: 0.79ms ``` Day 02 -Time part 1: 2.04ms -Time part 2: 1.61ms -Both parts: 3.6500000000000004ms +Time part 1: 2.58ms +Time part 2: 2.49ms +Both parts: 5.07ms ``` ``` Day 03 -Time part 1: - -Time part 2: - -Both parts: - +Time part 1: 1.68ms +Time part 2: 5.61ms +Both parts: 7.29ms ``` ``` @@ -243,8 +243,8 @@ Both parts: - ``` ``` -Total stars: 4/50 -Total time: 4.44ms +Total stars: 6/50 +Total time: 13.15ms ``` diff --git a/package-lock.json b/package-lock.json index ed112d3..1ad03dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,7 +5,6 @@ "requires": true, "packages": { "": { - "name": "aoc2021", "version": "1.0.0", "license": "ISC", "devDependencies": { @@ -169,6 +168,7 @@ "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", + "fsevents": "~2.3.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", @@ -315,6 +315,25 @@ "integrity": "sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==", "dev": true, "hasInstallScript": true, + "dependencies": { + "esbuild-android-arm64": "0.13.15", + "esbuild-darwin-64": "0.13.15", + "esbuild-darwin-arm64": "0.13.15", + "esbuild-freebsd-64": "0.13.15", + "esbuild-freebsd-arm64": "0.13.15", + "esbuild-linux-32": "0.13.15", + "esbuild-linux-64": "0.13.15", + "esbuild-linux-arm": "0.13.15", + "esbuild-linux-arm64": "0.13.15", + "esbuild-linux-mips64le": "0.13.15", + "esbuild-linux-ppc64le": "0.13.15", + "esbuild-netbsd-64": "0.13.15", + "esbuild-openbsd-64": "0.13.15", + "esbuild-sunos-64": "0.13.15", + "esbuild-windows-32": "0.13.15", + "esbuild-windows-64": "0.13.15", + "esbuild-windows-arm64": "0.13.15" + }, "bin": { "esbuild": "bin/esbuild" }, @@ -568,7 +587,8 @@ "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2", - "optionator": "^0.8.1" + "optionator": "^0.8.1", + "source-map": "~0.6.1" }, "bin": { "escodegen": "bin/escodegen.js", diff --git a/package.json b/package.json index ee9de86..40f86c7 100644 --- a/package.json +++ b/package.json @@ -21,4 +21,4 @@ "engines": { "node": ">=16.0.0" } -} \ No newline at end of file +} diff --git a/src/day03/README.md b/src/day03/README.md new file mode 100644 index 0000000..49e6186 --- /dev/null +++ b/src/day03/README.md @@ -0,0 +1,9 @@ +# 🎄 Advent of Code 2021 - day 3 🎄 + +## Info + +Task description: [link](https://adventofcode.com/2021/day/3) + +## Notes + +... \ No newline at end of file diff --git a/src/day03/index.js b/src/day03/index.js new file mode 100644 index 0000000..74e7bfc --- /dev/null +++ b/src/day03/index.js @@ -0,0 +1,104 @@ +import run from "aocrunner" + +const parseInput = (rawInput) => rawInput.trim().split`\n` + +const part1 = (rawInput) => { + const input = parseInput(rawInput) + const ones = [] + input.forEach((l) => { + ;[...l].forEach((x, i) => { + if (x === "1") { + ones[i] = (ones[i] || 0) + 1 + } + }) + }) + const gamma = parseInt( + ones.reduce((acc, p) => acc + (p >= input.length / 2 ? "1" : "0"), ""), + 2, + ) + const epsilon = parseInt( + ones.reduce((acc, p) => acc + (p < input.length / 2 ? "1" : "0"), ""), + 2, + ) + return gamma * epsilon +} + +function countOnes(input) { + const ones = [] + input.forEach((l) => { + ;[...l].forEach((x, i) => { + if (x === "1") { + ones[i] = (ones[i] || 0) + 1 + } + }) + }) + return ones +} + +const part2 = (rawInput) => { + const input = parseInput(rawInput) + let oxyQueue = input.slice() + for (let place = 0; oxyQueue.length !== 1; place++) { + const ones = countOnes(oxyQueue) + oxyQueue = oxyQueue.filter((val) => { + const most = ones[place] >= oxyQueue.length / 2 ? "1" : "0" + return val[place] === most + }) + } + const oxy = parseInt(oxyQueue[0], 2) + + let co2Queue = input.slice() + for (let place = 0; co2Queue.length !== 1; place++) { + const ones = countOnes(co2Queue) + co2Queue = co2Queue.filter( + (val) => val[place] === (ones[place] < co2Queue.length / 2 ? "1" : "0"), + ) + } + const co2 = parseInt(co2Queue[0], 2) + + return oxy * co2 +} + +run({ + part1: { + tests: [ + { + input: `00100 +11110 +10110 +10111 +10101 +01111 +00111 +11100 +10000 +11001 +00010 +01010`, + expected: 198, + }, + ], + solution: part1, + }, + part2: { + tests: [ + { + input: `00100 +11110 +10110 +10111 +10101 +01111 +00111 +11100 +10000 +11001 +00010 +01010`, + expected: 230, + }, + ], + solution: part2, + }, + trimTestInputs: true, +})