Skip to content

Commit a96403a

Browse files
committed
AoC2025: day 5 part 2 wip
1 parent 9cd61b2 commit a96403a

2 files changed

Lines changed: 57 additions & 3 deletions

File tree

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ describe('2025 Day 5', () => {
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(14);
11+
expect(await part2('input')).toEqual(1111);
1212
});
1313
});

2024-2025/src/2025/day05/day05.ts

Lines changed: 55 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 day5(inputFile);
9+
return await day5(inputFile, findTotalFreshIngredientCount);
1010
}
1111

1212
type IdRange = { from: number; to: number };
@@ -43,4 +43,58 @@ function findFreshIngredients(idRanges: IdRange[], ingredientIds: number[]): num
4343
}
4444
}
4545
return freshCount;
46+
}
47+
48+
function findTotalFreshIngredientCount(idRanges: IdRange[], _: number[]): number {
49+
let reduceRanges = true;
50+
let idRangesCopy = idRanges.slice();
51+
52+
while (reduceRanges) {
53+
reduceRanges = false;
54+
for (let i = 0; i < idRanges.length; i++){
55+
const a = idRanges[i];
56+
for (let j = i + 1; j < idRanges.length; j++) {
57+
const b = idRanges[j];
58+
59+
if (a.from >= b.from && a.from <= b.to) {
60+
reduceRanges = true;
61+
idRangesCopy.splice(j, 1);
62+
idRangesCopy.splice(i, 1);
63+
if (a.to >= b.to) {
64+
idRangesCopy.push({ from: b.from, to: a.to });
65+
}
66+
if (b.to >= a.to) {
67+
idRangesCopy.push({ from: b.from, to: b.to });
68+
}
69+
break;
70+
}
71+
72+
if (a.to >= b.from && a.to <= b.to) {
73+
reduceRanges = true;
74+
idRangesCopy.splice(j, 1);
75+
idRangesCopy.splice(i, 1);
76+
77+
if (a.from >= b.from) {
78+
idRangesCopy.push({ from: b.from, to: b.to });
79+
}
80+
if (b.from >= a.from) {
81+
idRangesCopy.push({ from: a.from, to: b.to });
82+
}
83+
break;
84+
}
85+
}
86+
if (reduceRanges) {
87+
break;
88+
}
89+
}
90+
91+
idRanges = idRangesCopy.slice();
92+
}
93+
94+
let freshCount = 0;
95+
idRanges.forEach(idRange => {
96+
freshCount += (idRange.to - idRange.from) + 1;
97+
})
98+
99+
return freshCount;
46100
}

0 commit comments

Comments
 (0)