mirror of
https://github.com/seigler/aoc2021
synced 2025-07-27 09:26:10 +00:00
day 3
This commit is contained in:
parent
4dcf7cb90f
commit
a0d6d46196
6 changed files with 151 additions and 18 deletions
|
@ -39,16 +39,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"part1": {
|
"part1": {
|
||||||
"solved": false,
|
"solved": true,
|
||||||
"result": null,
|
"result": "2498354",
|
||||||
"attempts": [],
|
"attempts": [],
|
||||||
"time": null
|
"time": 1.68
|
||||||
},
|
},
|
||||||
"part2": {
|
"part2": {
|
||||||
"solved": false,
|
"solved": true,
|
||||||
"result": null,
|
"result": "3277956",
|
||||||
"attempts": [],
|
"attempts": [],
|
||||||
"time": null
|
"time": 5.61
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
18
README.md
18
README.md
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
[](src/day01)
|
[](src/day01)
|
||||||
[](src/day02)
|
[](src/day02)
|
||||||

|
[](src/day03)
|
||||||

|

|
||||||

|

|
||||||

|

|
||||||
|
@ -76,16 +76,16 @@ Both parts: 0.79ms
|
||||||
|
|
||||||
```
|
```
|
||||||
Day 02
|
Day 02
|
||||||
Time part 1: 2.04ms
|
Time part 1: 2.58ms
|
||||||
Time part 2: 1.61ms
|
Time part 2: 2.49ms
|
||||||
Both parts: 3.6500000000000004ms
|
Both parts: 5.07ms
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
Day 03
|
Day 03
|
||||||
Time part 1: -
|
Time part 1: 1.68ms
|
||||||
Time part 2: -
|
Time part 2: 5.61ms
|
||||||
Both parts: -
|
Both parts: 7.29ms
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -243,8 +243,8 @@ Both parts: -
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
Total stars: 4/50
|
Total stars: 6/50
|
||||||
Total time: 4.44ms
|
Total time: 13.15ms
|
||||||
```
|
```
|
||||||
|
|
||||||
<!--/RESULTS-->
|
<!--/RESULTS-->
|
||||||
|
|
24
package-lock.json
generated
24
package-lock.json
generated
|
@ -5,7 +5,6 @@
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "aoc2021",
|
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
@ -169,6 +168,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"anymatch": "~3.1.2",
|
"anymatch": "~3.1.2",
|
||||||
"braces": "~3.0.2",
|
"braces": "~3.0.2",
|
||||||
|
"fsevents": "~2.3.2",
|
||||||
"glob-parent": "~5.1.2",
|
"glob-parent": "~5.1.2",
|
||||||
"is-binary-path": "~2.1.0",
|
"is-binary-path": "~2.1.0",
|
||||||
"is-glob": "~4.0.1",
|
"is-glob": "~4.0.1",
|
||||||
|
@ -315,6 +315,25 @@
|
||||||
"integrity": "sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==",
|
"integrity": "sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"hasInstallScript": 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": {
|
"bin": {
|
||||||
"esbuild": "bin/esbuild"
|
"esbuild": "bin/esbuild"
|
||||||
},
|
},
|
||||||
|
@ -568,7 +587,8 @@
|
||||||
"esprima": "^4.0.1",
|
"esprima": "^4.0.1",
|
||||||
"estraverse": "^5.2.0",
|
"estraverse": "^5.2.0",
|
||||||
"esutils": "^2.0.2",
|
"esutils": "^2.0.2",
|
||||||
"optionator": "^0.8.1"
|
"optionator": "^0.8.1",
|
||||||
|
"source-map": "~0.6.1"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"escodegen": "bin/escodegen.js",
|
"escodegen": "bin/escodegen.js",
|
||||||
|
|
9
src/day03/README.md
Normal file
9
src/day03/README.md
Normal 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
104
src/day03/index.js
Normal 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,
|
||||||
|
})
|
Loading…
Add table
Add a link
Reference in a new issue