-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathday08_part2.js
More file actions
58 lines (47 loc) · 1.46 KB
/
day08_part2.js
File metadata and controls
58 lines (47 loc) · 1.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
var fs = require('fs');
var path = require('path');
var filePath = './inputDay08.txt';
let buffer = fs.readFileSync(path.join(__dirname, filePath));
let input = buffer.toString();
let treeGrid = [];
input.split('\n').forEach((line, index) => {
if (line.length > 0) {
treeGrid.push([...line]);
}
});
let gridWidth = treeGrid[0].length;
let gridHeight = treeGrid.length;
let maxViewingScore = 0;
for (let row = 0; row < gridHeight; ++row) {
for (let column = 0; column < gridWidth; ++column) {
calcViewingScore(column, row);
}
}
console.log(maxViewingScore);
function calcViewingScore(column, row) {
let distanceToLeft = 0;
for (let c = column - 1; c >= 0; --c) {
++distanceToLeft;
if (treeGrid[row][c] >= treeGrid[row][column])
break;
}
let distanceToRight = 0;
for (let c = column + 1; c < gridWidth; ++c) {
++distanceToRight;
if (treeGrid[row][c] >= treeGrid[row][column])
break;
}
let distanceToTop = 0;
for (let r = row - 1; r >= 0; --r) {
++distanceToTop;
if (treeGrid[r][column] >= treeGrid[row][column])
break;
}
let distanceToBottom = 0;
for (let r = row + 1; r < gridHeight; ++r) {
++distanceToBottom;
if (treeGrid[r][column] >= treeGrid[row][column])
break;
}
maxViewingScore = Math.max(distanceToLeft * distanceToRight * distanceToTop * distanceToBottom, maxViewingScore);
}