mosredna

AoC 2022 day 8

Dec 8th, 2022 (edited)
311
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 2.06 KB | Source Code | 0 0
  1. const fs = require('fs');
  2. const eol = require('os').EOL;
  3.  
  4. const startTime = new Date().getTime();
  5. let part1 = part2 = time = 0;
  6. let input = fs.readFileSync(__dirname + "/data.txt", 'utf8').split(eol).map(a => a.split(''));
  7.  
  8. part1 += 4 * input.length - 4
  9. for (let x = 1; x < input.length - 1; x++) {
  10.     for (let y = 1; y < input.length - 1; y++) {
  11.         let [up, down, left, right] = [true, true, true, true]
  12.         for (let z = 0; z < x; z++) {
  13.             if (input[z][y] >= input[x][y]) {
  14.                 up = false;
  15.                 break;
  16.             }
  17.         }
  18.         for (let z = input.length - 1; z > x; z--) {
  19.             if (input[z][y] >= input[x][y]) {
  20.                 down = false;
  21.                 break;
  22.             }
  23.         }
  24.         for (let z = 0; z < y; z++) {
  25.             if (input[x][z] >= input[x][y]) {
  26.                 left = false;
  27.                 break;
  28.             }
  29.         }
  30.         for (let z = input.length - 1; z > y; z--) {
  31.             if (input[x][z] >= input[x][y]) {
  32.                 right = false;
  33.                 break;
  34.             }
  35.         }
  36.  
  37.         if ([up, down, left, right].includes(true)) part1++;
  38.  
  39.         [up, down, left, right] = [0, 0, 0, 0];
  40.         for (let z = x - 1; z >= 0; z--) {
  41.             up++;
  42.             if (input[z][y] >= input[x][y]) {
  43.                 break;
  44.             }
  45.         }
  46.         for (let z = x + 1; z < input.length; z++) {
  47.             down++;
  48.             if (input[z][y] >= input[x][y]) {
  49.                 break;
  50.             }
  51.         }
  52.         for (let z = y - 1; z >= 0; z--) {
  53.             left++;
  54.             if (input[x][z] >= input[x][y]) {
  55.                 break;
  56.             }
  57.         }
  58.         for (let z = y + 1; z < input.length; z++) {
  59.             right++;
  60.             if (input[x][z] >= input[x][y]) {
  61.                 break;
  62.             }
  63.         }
  64.         part2 = Math.max(part2, [up, down, left, right].reduce((a, b) => a * b, 1))
  65.     }
  66. }
  67.  
  68. time = new Date().getTime() - startTime
  69. console.log(`Part 1: ${part1}\nPart 2: ${part2}\nTimer: ${time} ms`);
Advertisement
Add Comment
Please, Sign In to add comment