Skip to content

Commit fb00624

Browse files
chore(ts): 2024/d5
1 parent 52ba6fb commit fb00624

File tree

2 files changed

+101
-3
lines changed

2 files changed

+101
-3
lines changed

README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
## My AOC Stats
22

3-
Total stars: **26**
3+
Total stars: **28**
44

55
| Day | [2015][link-2015] | [2016][link-2016] | [2017][link-2017] | [2018][link-2018] | [2019][link-2019] | [2020][link-2020] | [2021][link-2021] | [2022][link-2022] | [2023][link-2023] | [2024][link-2024] |
66
| :--------: | :---------------- | :---------------- | :---------------- | :---------------- | :---------------- | :---------------- | :---------------- | :---------------- | :---------------- | :---------------- |
77
| **1** | ⭐⭐ | | | | | | | | ⭐⭐ | ⭐⭐ |
88
| **2** | ⭐⭐ | | | | | | | | ⭐⭐ | ⭐⭐ |
99
| **3** | | | | | | | | | ⭐⭐ | ⭐⭐ |
1010
| **4** | ⭐⭐ | | | | | | | | ⭐⭐ | ⭐⭐ |
11-
| **5** | | | | | | | | || |
11+
| **5** | | | | | | | | || ⭐⭐ |
1212
| **6** | | | | | | | | | ⭐⭐ | |
1313
| **7** | | | | | | | | | | |
1414
| **8** | | | | | | | | || |
@@ -29,7 +29,7 @@ Total stars: **26**
2929
| **23** | | | | | | | | | | |
3030
| **24** | | | | | | | | | | |
3131
| **25** | | | | | | | | | | |
32-
| **Total:** | 6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 12 | 8 |
32+
| **Total:** | 6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 12 | 10 |
3333

3434
[link-2015]: https://github.com/ShubhamVerma1811/advent-of-code/tree/main/src/2015
3535
[link-2016]: https://github.com/ShubhamVerma1811/advent-of-code/tree/main/src/2016

src/2024/day-05/typescript/index.ts

+98
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
// TODO:: refactor
2+
3+
import { readFile } from 'node:fs/promises';
4+
import { resolve } from 'node:path';
5+
6+
async function main() {
7+
const data = await readFile(
8+
resolve('../../../../', 'data', '2024-05.txt'),
9+
'utf8'
10+
);
11+
12+
// Part 1
13+
{
14+
console.time('Part 1');
15+
const result = part1(data);
16+
console.info('Result:', result);
17+
console.timeEnd('Part 1');
18+
}
19+
20+
// Part 2
21+
{
22+
console.time('Part 2');
23+
const result = part2(data);
24+
console.info('Result:', result);
25+
console.timeEnd('Part 2');
26+
}
27+
}
28+
29+
main();
30+
31+
export function part1(data: string) {
32+
const lines = data.trim().split('\n');
33+
const pages = lines.slice(0, lines.indexOf(''));
34+
const updates = lines
35+
.slice(lines.indexOf('') + 1)
36+
.map((i) => i.split(',').map(Number));
37+
38+
let sum = 0;
39+
40+
for (let i = 0; i < updates.length; i++) {
41+
const update = updates[i];
42+
let safe = false;
43+
44+
outerLoop: for (let j = 0; j < update.length; j++) {
45+
for (let k = j + 1; k < update.length; k++) {
46+
const str = `${update[j]}|${update[k]}`;
47+
if (!pages.includes(str)) {
48+
safe = false;
49+
break outerLoop;
50+
}
51+
safe = true;
52+
}
53+
}
54+
55+
if (safe) {
56+
sum += update[Math.floor(update.length / 2)];
57+
}
58+
}
59+
60+
return sum;
61+
}
62+
63+
export function part2(data: string) {
64+
const lines = data.trim().split('\n');
65+
const pages = lines.slice(0, lines.indexOf(''));
66+
const updates = lines
67+
.slice(lines.indexOf('') + 1)
68+
.map((i) => i.split(',').map(Number));
69+
70+
let sum = 0;
71+
72+
for (let i = 0; i < updates.length; i++) {
73+
const update = updates[i];
74+
let safe = false;
75+
76+
outerLoop: for (let j = 0; j < update.length; j++) {
77+
for (let k = j + 1; k < update.length; k++) {
78+
const str = `${update[j]}|${update[k]}`;
79+
if (!pages.includes(str)) {
80+
if (pages.includes(`${update[k]}|${update[j]}`)) {
81+
[update[j], update[k]] = [update[k], update[j]];
82+
safe = true;
83+
// continue outerLoop;
84+
} else {
85+
safe = false;
86+
break outerLoop;
87+
}
88+
}
89+
}
90+
}
91+
92+
if (safe) {
93+
sum += update[Math.floor(update.length / 2)];
94+
}
95+
}
96+
97+
return sum;
98+
}

0 commit comments

Comments
 (0)