Skip to content

Commit 68b7ab9

Browse files
committed
Solve day 2
1 parent 00d9bde commit 68b7ab9

File tree

4 files changed

+78
-2
lines changed

4 files changed

+78
-2
lines changed

.aoc_tiles/tiles/2024/02.png

9.99 KB
Loading

README.md

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
<!-- AOC TILES BEGIN -->
22
<h1 align="center">
3-
2024 - 2 ⭐ - TypeScript
3+
2024 - 4 ⭐ - TypeScript
44
</h1>
55
<a href="src/2024/day1.ts">
66
<img src=".aoc_tiles/tiles/2024/01.png" width="161px">
77
</a>
8+
<a href="src/2024/day2.ts">
9+
<img src=".aoc_tiles/tiles/2024/02.png" width="161px">
10+
</a>
811
<h1 align="center">
912
2023 - 50 ⭐ - TypeScript
1013
</h1>

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"main": "index.js",
66
"scripts": {
77
"lint": "prettier -w src/**/*.ts",
8-
"run": "tsc -p tsconfig.json && node build/day1.js"
8+
"run": "tsc -p tsconfig.json && node build/day2.js"
99
},
1010
"author": "",
1111
"license": "ISC",

src/2024/day2.ts

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import { input } from './input';
2+
3+
const reps = input.split('\n').map((r) => {
4+
return r.split(' ').map((n) => Number.parseInt(n));
5+
});
6+
7+
// The levels are either all increasing or all decreasing.
8+
// Any two adjacent levels differ by at least one and at most three.
9+
10+
function part1(reports: number[][]) {
11+
let unSafeCount: number = 0;
12+
13+
for (let r of reports) {
14+
const a = r[0];
15+
const b = r[1];
16+
17+
const inc = b > a;
18+
for (let i = 1; i < r.length; i++) {
19+
const diff = (inc ? -1 : 1) * (r[i - 1] - r[i]);
20+
if (diff < 1 || diff > 3) {
21+
unSafeCount++;
22+
break;
23+
}
24+
}
25+
}
26+
27+
return reports.length - unSafeCount;
28+
}
29+
30+
function part2(reports: number[][]) {
31+
function check(
32+
row: number[],
33+
inc: boolean,
34+
prev: number,
35+
cur: number,
36+
hasFix: boolean,
37+
): boolean {
38+
if (cur > row.length) {
39+
return true;
40+
}
41+
const diff = (inc ? -1 : 1) * (row[prev] - row[cur]);
42+
if (diff < 1 || diff > 3) {
43+
if (hasFix) {
44+
return false;
45+
}
46+
return (
47+
// skip current or skip previous
48+
check(row, inc, prev, cur + 1, true) ||
49+
check(row, inc, prev - 1, cur, true)
50+
);
51+
}
52+
53+
return check(row, inc, cur, cur + 1, hasFix);
54+
}
55+
56+
let unSafeCount: number = 0;
57+
58+
for (let r of reports) {
59+
if (
60+
!check(r, true, 0, 1, false) &&
61+
!check(r, false, 0, 1, false) &&
62+
!check(r, true, 1, 2, true) &&
63+
!check(r, false, 1, 2, true)
64+
) {
65+
unSafeCount++;
66+
}
67+
}
68+
69+
return reports.length - unSafeCount;
70+
}
71+
72+
console.log(part1(reps));
73+
console.log(part2(reps));

0 commit comments

Comments
 (0)