Advertisement
scibuff

Advent of Code 2023 - Day 21 - Part 1

Dec 21st, 2023
642
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 1.06 KB | Source Code | 0 0
  1. const wrapped = (i, j, size) => {
  2.   i %= size;
  3.   j %= size;
  4.   return {
  5.     wi: i >= 0 ? i : size + i,
  6.     wj: j >= 0 ? j : size + j,
  7.   };
  8. };
  9. const getNextSteps = (grid, i, j, remaining) => {
  10.   const k = key(i, j);
  11.   const { wi, wj } = wrapped(i, j, grid.size);
  12.   const wk = key(wi, wj);
  13.  
  14.   if (grid.walls[wk] || grid.plots[k] >= remaining) {
  15.     return [];
  16.   }
  17.   grid.plots[k] = remaining;
  18.   if (remaining > 0) {
  19.     return [
  20.       { i: i + 1, j: j, remaining: remaining - 1 },
  21.       { i: i - 1, j: j, remaining: remaining - 1 },
  22.       { i: i, j: j + 1, remaining: remaining - 1 },
  23.       { i: i, j: j - 1, remaining: remaining - 1 },
  24.     ];
  25.   }
  26.   return [];
  27. };
  28. const solvePart1 = (input, steps = 64) => {
  29.   const grid = parse(input);
  30.   const queue = [
  31.     {
  32.       i: grid.start.i,
  33.       j: grid.start.j,
  34.       remaining: steps,
  35.     },
  36.   ];
  37.   while (queue.length > 0) {
  38.     const step = queue.shift();
  39.     queue.push(...getNextSteps(grid, step.i, step.j, step.remaining));
  40.   }
  41.   return Object.values(grid.plots).filter((e) => e % 2 == 0).length;
  42. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement