This commit is contained in:
Joshua Seigler 2021-12-03 01:02:42 -05:00
parent 4dcf7cb90f
commit a0d6d46196
6 changed files with 151 additions and 18 deletions

View file

@ -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
}
},
{

View file

@ -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
```
<!--/RESULTS-->

24
package-lock.json generated
View file

@ -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",

View file

@ -21,4 +21,4 @@
"engines": {
"node": ">=16.0.0"
}
}
}

9
src/day03/README.md Normal file
View file

@ -0,0 +1,9 @@
# 🎄 Advent of Code 2021 - day 3 🎄
## Info
Task description: [link](https://adventofcode.com/2021/day/3)
## Notes
...

104
src/day03/index.js Normal file
View file

@ -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,
})