isundil 3 years ago
parent
commit
f743b8a5a3
1 changed files with 24 additions and 18 deletions
  1. 24 18
      d8/main.js

+ 24 - 18
d8/main.js

@@ -2,9 +2,10 @@
 const fs = require('fs');
 const readline = require('readline');
 
-function isVisible(map, posX, posY) {
+function finalize(map, posX, posY) {
     let i =1;
     let visibility = [ true, true, true, true ];
+    let globalVis = 0;
     let maxDist = [ posX, map.length -posX -1, posY, map[0].length -posY -1 ];
     let cross = [];
 
@@ -13,6 +14,7 @@ function isVisible(map, posX, posY) {
         cross.forEach((tree, index) => {
             if (tree && tree.height >= map[posX][posY].height && visibility[index]) {
                 visibility[index] = false;
+                globalVis++;
                 maxDist[index] = i;
             }
         });
@@ -20,33 +22,37 @@ function isVisible(map, posX, posY) {
     }
     while (!cross.every(x => !x) && !visibility.every(i => !i));
 
-    map[posX][posY].visible = visibility.filter(i => !!i).length;
+    map[posX][posY].visible = globalVis < 4;
     map[posX][posY].maxDist = maxDist.reduce((acc, i) => acc ? acc * i : i);
 }
 
-function getColor(height) {
-    return "\033[" +[39, 32, 32, 92, 33, 93, 93, 91, 31, 31][height] +'m';
+function print(map) {
+    const colorMap = [39, 32, 32, 92, 33, 93, 93, 91, 31, 31];
+    for (let i of map) {
+        let buf = "";
+        for (let j of i)
+            buf += '\033[' +colorMap[j.height] +'mx';
+        console.log(buf + '\033[39m');
+    }
 }
 
 async function main() {
     let lines = [];
-    let visible = [];
+    let visibleCount = 0;
+    let maxScenic = 0;
 
-    for await (let line of readline.createInterface({ input: process.stdin })) {
+    for await (let line of readline.createInterface({ input: process.stdin }))
         lines.push(line.split("").map(i => { return { height: parseInt(i), visible: 0, maxDist: 0 };}));
+    for (let i =0; i < lines.length; ++i) {
+        for (let j =0; j < lines[i].length; ++j) {
+            finalize(lines, i, j);
+            if (lines[i][j].visible) visibleCount++;
+            maxScenic = Math.max(maxScenic, lines[i][j].maxDist);
+        }
     }
-    for (let i =0; i < lines.length; ++i)
-        for (let j =0; j < lines[i].length; ++j)
-            isVisible(lines, i, j);
-    for (let i of lines) {
-        let buf = "";
-        for (let j of i)
-            buf += getColor(j.height) +'x';
-        buf += getColor(0);
-        console.log(buf);
-    }
-    console.log("Number of visible trees: ", lines.reduce((acc, i) => acc ? acc.concat(i) : i).filter(i => i.visible).length);
-    console.log("Max scenic score: ", Math.max(...lines.reduce((acc, i) => acc ? acc.concat(i) : i).map(i => i.maxDist)));
+    print(lines);
+    console.log("Number of visible trees: ", visibleCount);
+    console.log("Max scenic score: ", maxScenic);
 };
 
 (main());