Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const wrapped = (i, j, size) => {
- i %= size;
- j %= size;
- return {
- wi: i >= 0 ? i : size + i,
- wj: j >= 0 ? j : size + j,
- };
- };
- const getNextSteps = (grid, i, j, remaining) => {
- const k = key(i, j);
- const { wi, wj } = wrapped(i, j, grid.size);
- const wk = key(wi, wj);
- if (grid.walls[wk] || grid.plots[k] >= remaining) {
- return [];
- }
- grid.plots[k] = remaining;
- if (remaining > 0) {
- return [
- { i: i + 1, j: j, remaining: remaining - 1 },
- { i: i - 1, j: j, remaining: remaining - 1 },
- { i: i, j: j + 1, remaining: remaining - 1 },
- { i: i, j: j - 1, remaining: remaining - 1 },
- ];
- }
- return [];
- };
- const solvePart1 = (input, steps = 64) => {
- const grid = parse(input);
- const queue = [
- {
- i: grid.start.i,
- j: grid.start.j,
- remaining: steps,
- },
- ];
- while (queue.length > 0) {
- const step = queue.shift();
- queue.push(...getNextSteps(grid, step.i, step.j, step.remaining));
- }
- return Object.values(grid.plots).filter((e) => e % 2 == 0).length;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement