|
|
@@ -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());
|