Skip to content

Commit 91425f0

Browse files
committed
AoC2025: day 3 part 2
1 parent 7742b27 commit 91425f0

3 files changed

Lines changed: 39 additions & 3 deletions

File tree

2024-2025/src/2025/README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# 🎄 Advent of Code 2025 🎄
2+
3+
| Day | Title | Code | Tests | Tags | Difficulty |
4+
|------------------------------------------------|------------------------|------------------------|------------------------------|---------------------------------------------------|------------|
5+
| [Day 1](https://adventofcode.com/2024/day/1) | Historian Hysteria | [code](day01/day01.ts) | [tests](day01/day01.test.ts) | num list comparison, abs value | 🧊 |
6+
| [Day 2](https://adventofcode.com/2024/day/2) | Red-Nosed Reports | [code](day02/day02.ts) | [tests](day02/day02.test.ts) | increasing/decreasing num list, deltas | 🧊 |
7+
| [Day 3](https://adventofcode.com/2024/day/3) | Mull It Over | [code](day03/day03.ts) | [tests](day03/day03.test.ts) | regex, compiler | 🧊 |
8+
| [Day 4](https://adventofcode.com/2024/day/4) | Ceres Search | [code](day04/day04.ts) | [tests](day04/day04.test.ts) | grid, crosswords | 🧊🧊 |
9+
| [Day 5](https://adventofcode.com/2024/day/5) | Print Queue | [code](day05/day05.ts) | [tests](day05/day05.test.ts) | graph, topological sort, Kahn's | 🧊🧊🧊 |
10+
| [Day 6](https://adventofcode.com/2024/day/6) | Guard Gallivant | [code](day06/day06.ts) | [tests](day06/day06.test.ts) | grid, move & turn, detect loops | 🧊🧊 |
11+
| [Day 7](https://adventofcode.com/2024/day/7) | Bridge Repair | [code](day07/day07.ts) | [tests](day07/day07.test.ts) | equations, combos of + * \|\|, binary and ternary | 🧊🧊 |
12+
| [Day 8](https://adventofcode.com/2024/day/8) | Resonant Collinearity | [code](day08/day08.ts) | [tests](day08/day08.test.ts) | grid, Manhattan distance | 🧊🧊 |
13+
| [Day 9](https://adventofcode.com/2024/day/9) | Disk Fragmented | [code](day09/day09.ts) | [tests](day09/day09.test.ts) | disk fragmenting | 🧊🧊🧊 |
14+
| [Day 10](https://adventofcode.com/2024/day/10) | Hoof It | [code](day10/day10.ts) | [tests](day10/day10.test.ts) | topographic map, bfs, dfs | 🧊🧊 |
15+
| [Day 11](https://adventofcode.com/2024/day/11) | Plutonian Pebbles | [code](day11/day11.ts) | [tests](day11/day11.test.ts) | list growing exponentially | 🧊🧊🧊 |
16+
| [Day 12](https://adventofcode.com/2024/day/12) | Garden Groups | [code](day12/day12.ts) | [tests](day12/day12.test.ts) | flood fill; area, perimeter and sides | 🧊🧊🧊 |

2024-2025/src/2025/day03/day03.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ describe('2025 Day 3', () => {
77
});
88

99
test('Part 2', async () => {
10-
// expect(await part2('testInput1')).toEqual(31);
11-
// expect(await part2('input')).toEqual(29379307);
10+
expect(await part2('testInput1')).toEqual(3121910778619);
11+
expect(await part2('input')).toEqual(173577199527257);
1212
});
1313
});

2024-2025/src/2025/day03/day03.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export async function part1(inputFile: string) {
66
}
77

88
export async function part2(inputFile: string) {
9-
return await day3(inputFile);
9+
return await day3(inputFile, computeMaxJoltage12);
1010
}
1111

1212
async function day3(inputFile: string, calcFn?: (batteryBanks: number[][]) => number) {
@@ -29,6 +29,26 @@ function getAllIndices(arr: number[], value: number): number[] {
2929
return indexes;
3030
}
3131

32+
function largestKDigits(bank: number[], k: number): number {
33+
const toRemove = bank.length - k;
34+
const stack: number[] = [];
35+
let removed = 0;
36+
37+
for (const digit of bank) {
38+
while (removed < toRemove && stack.length > 0 && stack[stack.length - 1] < digit) {
39+
stack.pop();
40+
removed++;
41+
}
42+
stack.push(digit);
43+
}
44+
45+
return Number(stack.slice(0, k).join(''));
46+
}
47+
48+
function computeMaxJoltage12(batteryBanks: number[][]): number {
49+
return batteryBanks.reduce((sum, bank) => sum + largestKDigits(bank, 12), 0);
50+
}
51+
3252
function computeTotalOutputJoltage(batteryBanks: number[][]): number {
3353
let sum = 0;
3454
batteryBanks.forEach(batteryBank => {

0 commit comments

Comments
 (0)