Skip to content

Commit 527d15b

Browse files
committed
14 part2
1 parent e542e25 commit 527d15b

File tree

1 file changed

+21
-24
lines changed

1 file changed

+21
-24
lines changed

src/14/solve.ts

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,15 @@ class Solve14 extends FileReader {
1414
super();
1515
this.readData("src/14/input.data")
1616
.then((data) => {
17-
this.process(data.split("\n"));
17+
this.process(data.split("\n"), false);
18+
this.process(data.split("\n"), true);
1819
})
1920
.catch((err) => console.log(err));
2021
}
2122

2223
rocks: Map<string, boolean> = new Map()
2324
blocksByX: Map<number, number[]> = new Map()
25+
maxY = 0
2426

2527
addToMap = (map: Map<number, number[]>, index: number, value: number) => {
2628
const arr = map.get(index) || []
@@ -34,6 +36,12 @@ class Solve14 extends FileReader {
3436
key = (x: number, y: number) => `${x}_${y}`
3537

3638
addPoints = (x1: number, y1: number, x2: number, y2: number) => {
39+
if (y1 > this.maxY) {
40+
this.maxY = y1
41+
}
42+
if (y2 > this.maxY) {
43+
this.maxY = y2
44+
}
3745
if (x1 === x2) {
3846
const diff = Math.abs(y2 - y1) + 1
3947
const it = Math.sign(y2 - y1)
@@ -63,29 +71,11 @@ class Solve14 extends FileReader {
6371

6472
blockedNext = (point: Point, left: boolean) => this.blocksByX.get(point.x + (left ? -1 : 1))?.includes(point.y + 1)
6573

66-
print = () => {
67-
// for (let y=0;y<=9;y++) {
68-
for (let y=150;y<=170;y++) {
69-
let line = ""
70-
// for (let x=494;x<=503;x++) {
71-
for (let x=500;x<=550;x++) {
72-
const r = this.rocks.get(this.key(x,y))
73-
if (r !== undefined) {
74-
line += "#"
75-
continue
76-
}
77-
const s = this.blocksByX.get(x)?.includes(y)
78-
if (s) {
79-
line += "o"
80-
continue
81-
}
82-
line += "."
83-
}
84-
console.log(line)
85-
}
86-
}
74+
process = (data: string[], part2: boolean) => {
75+
this.rocks = new Map()
76+
this.blocksByX = new Map()
77+
this.maxY = 0
8778

88-
process = (data: string[]) => {
8979
data.forEach(row => {
9080
const segments = row.split(' -> ')
9181
let last = segments[0].split(',')
@@ -101,9 +91,16 @@ class Solve14 extends FileReader {
10191
let sand = new Point(500, 0)
10292

10393
while (true) {
94+
if (part2 && this.blocksByX.get(500)?.includes(0)) {
95+
done = true
96+
}
10497
const newYarr = this.blocksByX.get(sand.x)?.filter(y => y >= sand.y)
10598
if (newYarr === undefined || newYarr.length === 0) {
106-
done = true
99+
if (part2) {
100+
this.addToMap(this.blocksByX, sand.x, this.maxY + 1)
101+
} else {
102+
done = true
103+
}
107104
break
108105
}
109106
newYarr.sort((a: number, b: number) => a - b)

0 commit comments

Comments
 (0)