This commit is contained in:
Joshua Seigler 2021-12-04 00:40:29 -05:00
parent a0d6d46196
commit fa9f741f90
5 changed files with 167 additions and 12 deletions

View file

@ -53,16 +53,16 @@
}, },
{ {
"part1": { "part1": {
"solved": false, "solved": true,
"result": null, "result": "11536",
"attempts": [], "attempts": [],
"time": null "time": 20.05
}, },
"part2": { "part2": {
"solved": false, "solved": true,
"result": null, "result": "1284",
"attempts": [], "attempts": [],
"time": null "time": 55.8
} }
}, },
{ {

View file

@ -14,7 +14,7 @@
[![Day](https://badgen.net/badge/01/%E2%98%85%E2%98%85/green)](src/day01) [![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/02/%E2%98%85%E2%98%85/green)](src/day02)
[![Day](https://badgen.net/badge/03/%E2%98%85%E2%98%85/green)](src/day03) [![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/04/%E2%98%85%E2%98%85/green)](src/day04)
![Day](https://badgen.net/badge/05/%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) ![Day](https://badgen.net/badge/06/%E2%98%86%E2%98%86/gray)
![Day](https://badgen.net/badge/07/%E2%98%86%E2%98%86/gray) ![Day](https://badgen.net/badge/07/%E2%98%86%E2%98%86/gray)
@ -90,9 +90,9 @@ Both parts: 7.29ms
``` ```
Day 04 Day 04
Time part 1: - Time part 1: 20.05ms
Time part 2: - Time part 2: 55.8ms
Both parts: - Both parts: 75.85ms
``` ```
``` ```
@ -243,8 +243,8 @@ Both parts: -
``` ```
``` ```
Total stars: 6/50 Total stars: 8/50
Total time: 13.15ms Total time: 89ms
``` ```
<!--/RESULTS--> <!--/RESULTS-->

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

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

143
src/day04/index.js Normal file
View file

@ -0,0 +1,143 @@
import run from "aocrunner"
import { transpose } from "../utils/index.js"
function check(board) {
const board2 = transpose(board)
for (let i = 0; i < 5; i++) {
if (
board[i].every((x) => x === null) ||
board2[i].every((x) => x === null)
) {
return true
}
}
return false
}
const parseInput = (rawInput) => {
const lines = rawInput.trim().split`\n`
const calls = lines.shift().split`,`.map(Number)
const boards = []
while (lines.length > 0) {
const nextBoard = []
lines.shift() //blank line
for (let i = 0; i < 5; i++) {
nextBoard[i] = lines.shift().trim().split(/\s+/).map(Number)
}
boards.push(nextBoard)
}
return { calls, boards }
}
const part1 = (rawInput) => {
const { calls, boards } = parseInput(rawInput)
const marked = []
let winningBoard, lastCall
outer: for (const call of calls) {
lastCall = call
for (const board of boards) {
for (const row of board) {
for (let i = 0; i < 5; i++) {
if (row[i] === call) {
row[i] = null
if (check(board)) {
winningBoard = board
break outer
}
}
}
}
}
}
const sum = winningBoard.reduce(
(acc, row) => acc + row.reduce((acc2, cell) => acc2 + cell, 0),
0,
)
return sum * lastCall
}
const part2 = (rawInput) => {
const { calls, boards } = parseInput(rawInput)
const marked = []
let winningSum, lastCall
for (const call of calls) {
for (const board of boards) {
for (const row of board) {
for (let i = 0; i < 5; i++) {
if (row[i] === call) {
row[i] = null
if (check(board)) {
lastCall = call
winningSum = board.reduce(
(acc, row) => acc + row.reduce((acc2, cell) => acc2 + cell, 0),
0,
)
board.splice(0, 5)
}
}
}
}
}
}
return winningSum * lastCall
}
run({
part1: {
tests: [
{
input: `7,4,9,5,11,17,23,2,0,14,21,24,10,16,13,6,15,25,12,22,18,20,8,19,3,26,1
22 13 17 11 0
8 2 23 4 24
21 9 14 16 7
6 10 3 18 5
1 12 20 15 19
3 15 0 2 22
9 18 13 17 5
19 8 7 25 23
20 11 10 24 4
14 21 16 12 6
14 21 17 24 4
10 16 15 9 19
18 8 23 26 20
22 11 13 6 5
2 0 12 3 7`,
expected: 4512,
},
],
solution: part1,
},
part2: {
tests: [
{
input: `7,4,9,5,11,17,23,2,0,14,21,24,10,16,13,6,15,25,12,22,18,20,8,19,3,26,1
22 13 17 11 0
8 2 23 4 24
21 9 14 16 7
6 10 3 18 5
1 12 20 15 19
3 15 0 2 22
9 18 13 17 5
19 8 7 25 23
20 11 10 24 4
14 21 16 12 6
14 21 17 24 4
10 16 15 9 19
18 8 23 26 20
22 11 13 6 5
2 0 12 3 7`,
expected: 1924,
},
],
solution: part2,
},
trimTestInputs: true,
})

View file

@ -22,3 +22,6 @@
* import myLib from '../utils/myLib' * import myLib from '../utils/myLib'
* import { myUtil } from '../utils' * import { myUtil } from '../utils'
*/ */
export function transpose(m) {
return m[0].map((x, i) => m.map((x) => x[i]))
}