Skip to content

Commit f4ea845

Browse files
committed
Year 2024, Day 11
1 parent 1202cdf commit f4ea845

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

clients/typescript/solutions/S2411.ts

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import ISolution from "./ISolution.ts";
2+
3+
export default class S2411 implements ISolution {
4+
firstPart(input: string): (number | string) | Promise<number | string> {
5+
const stones = input.split(" ").map(Number);
6+
for (let i = 0; i < 25; i++) {
7+
for (let elem = 0; elem < stones.length; elem++) {
8+
if (stones[elem] === 0) {
9+
stones[elem] = 1;
10+
continue;
11+
}
12+
if (stones[elem].toString().length % 2 === 0) {
13+
const half = stones[elem].toString().length / 2;
14+
stones.splice(elem, 1, Number(stones[elem].toString().substring(0, half)), Number(stones[elem].toString().substring(half)));
15+
elem++;
16+
continue;
17+
}
18+
stones[elem] *= 2024;
19+
}
20+
}
21+
return stones.length;
22+
}
23+
secondPart(input: string): (number | string) | Promise<number | string> {
24+
const inputstones = input.split(" ").map(Number);
25+
let stones: Record<number, number> = {};
26+
inputstones.forEach(stone => {
27+
stones[stone] ? stones[stone]++ : stones[stone] = 1;
28+
});
29+
for (let i = 0; i < 75; i++) {
30+
const newStones: Record<number, number> = {};
31+
stones[0] ? newStones[1] = stones[0] : '';
32+
stones[1] ? newStones[2024] = stones[1] : '';
33+
for (const key of Object.keys(stones)) {
34+
if (Number(key) === 0 || Number(key) === 1) {
35+
continue;
36+
}
37+
if (key.length % 2 === 0) {
38+
const half = key.length / 2;
39+
[key.substring(0, half), key.substring(half)].map(Number).forEach(half => {
40+
if (!Object.hasOwn(newStones, half)) {
41+
newStones[half] = 0;
42+
}
43+
newStones[half] += stones[Number(key)];
44+
});
45+
continue;
46+
}
47+
newStones[Number(key) * 2024] = stones[Number(key)];
48+
}
49+
stones = newStones;
50+
}
51+
return Object.entries(stones).reduce((acc, val) => acc + val[1], 0);
52+
}
53+
54+
}

0 commit comments

Comments
 (0)