Day 14. Forgot to keep the solution for part 1

This commit is contained in:
John Shaver 2022-12-13 22:54:41 -08:00
parent d547c86c17
commit c1e0aa3c9a
3 changed files with 223 additions and 0 deletions

2
2022/14/example.txt Normal file
View File

@ -0,0 +1,2 @@
498,4 -> 498,6 -> 496,6
503,4 -> 502,4 -> 502,9 -> 494,9

92
2022/14/index.js Normal file
View File

@ -0,0 +1,92 @@
const fs = require('fs/promises');
const sum = (arr) => arr.reduce((total, num) => total+num, 0);
const arrayOfLength = n => Array.from(Array(n).keys()).map(() => {});
const main = async () => {
const input = (await fs.readFile("./input.txt", 'utf8')).split("\n");
const coord = ([x, y]) => {
if(isNaN(x) || typeof y === "undefined") {
throw new Error("");
}
return `${x}-${y}`;
};
let sandUnitCount = 0;
const fillPath = ([x1, y1], [x2, y2]) => {
const fillIns = [];
if(x1 === x2) {
const yDiff = y2 - y1;
for(let y = y1; y !== y2; y = y + (Math.abs(yDiff)/yDiff)) {
fillIns.push(coord([x1, y]));
}
} else {
const xDiff = x2 - x1;
for(let x = x1; x !== x2; x = x + (xDiff/Math.abs(xDiff))) {
fillIns.push(coord([x, y1]));
}
}
return fillIns;
};
const grid = input.reduce((obj, row, i) => {
if(row === "" ) {
return obj;
}
const path = row.split(" -> ");
for(let i = 0; i < path.length - 1; i++) {
const start = path[i].split(",").map(x => parseInt(x));
const end = path[i + 1].split(",").map(x => parseInt(x));
const filledIn = fillPath(start, end);
filledIn.forEach(x => obj[x] = "#")
}
const lastRock = path[path.length - 1].split(",").map(x => parseInt(x))
obj[coord(lastRock)] = "#";
return obj;
}, {})
const sandFall = (x, y) => {
if(y === 174) {
return [x, y];
}
if(!grid[coord([x, y + 1])]) {
return sandFall(x, y + 1);
}
if(!grid[coord([x - 1, y + 1])]) {
return sandFall(x - 1, y + 1);
}
if(!grid[coord([x + 1, y + 1])]) {
return sandFall(x + 1, y + 1);
}
return [x, y];
};
const print = () => {
for(let y = 0; y < 175; ++y) {
console.log(arrayOfLength(100).map((_, i) => grid[coord([i + 450, y])] || ".").join(""));
}
console.log("\n\n\n")
console.log("Sand count: ", sandUnitCount);
};
while(true) {
const loc = sandFall(500, 0);
sandUnitCount++;
grid[coord(loc)] = "o";
console.log("Location of sand: ", loc);
if(loc[0] === 500 && loc[1] === 0) {
break;
}
}
console.log("Answer: ", sandUnitCount);
print();
}
main();

129
2022/14/input.txt Normal file
View File

@ -0,0 +1,129 @@
482,64 -> 482,59 -> 482,64 -> 484,64 -> 484,55 -> 484,64 -> 486,64 -> 486,58 -> 486,64 -> 488,64 -> 488,54 -> 488,64 -> 490,64 -> 490,55 -> 490,64
484,41 -> 484,42 -> 495,42 -> 495,41
494,51 -> 498,51
470,158 -> 475,158
480,151 -> 480,145 -> 480,151 -> 482,151 -> 482,150 -> 482,151 -> 484,151 -> 484,144 -> 484,151 -> 486,151 -> 486,148 -> 486,151 -> 488,151 -> 488,142 -> 488,151
468,123 -> 468,127 -> 460,127 -> 460,132 -> 474,132 -> 474,127 -> 473,127 -> 473,123
480,151 -> 480,145 -> 480,151 -> 482,151 -> 482,150 -> 482,151 -> 484,151 -> 484,144 -> 484,151 -> 486,151 -> 486,148 -> 486,151 -> 488,151 -> 488,142 -> 488,151
458,171 -> 462,171
473,73 -> 473,77 -> 466,77 -> 466,82 -> 485,82 -> 485,77 -> 477,77 -> 477,73
492,162 -> 497,162
494,27 -> 498,27
471,162 -> 476,162
480,156 -> 485,156
498,13 -> 498,17 -> 497,17 -> 497,24 -> 505,24 -> 505,17 -> 502,17 -> 502,13
462,120 -> 462,112 -> 462,120 -> 464,120 -> 464,114 -> 464,120 -> 466,120 -> 466,119 -> 466,120 -> 468,120 -> 468,118 -> 468,120 -> 470,120 -> 470,119 -> 470,120
461,165 -> 465,165
477,70 -> 487,70 -> 487,69
482,64 -> 482,59 -> 482,64 -> 484,64 -> 484,55 -> 484,64 -> 486,64 -> 486,58 -> 486,64 -> 488,64 -> 488,54 -> 488,64 -> 490,64 -> 490,55 -> 490,64
473,73 -> 473,77 -> 466,77 -> 466,82 -> 485,82 -> 485,77 -> 477,77 -> 477,73
462,85 -> 462,88 -> 454,88 -> 454,94 -> 470,94 -> 470,88 -> 466,88 -> 466,85
482,64 -> 482,59 -> 482,64 -> 484,64 -> 484,55 -> 484,64 -> 486,64 -> 486,58 -> 486,64 -> 488,64 -> 488,54 -> 488,64 -> 490,64 -> 490,55 -> 490,64
482,37 -> 488,37 -> 488,36
473,73 -> 473,77 -> 466,77 -> 466,82 -> 485,82 -> 485,77 -> 477,77 -> 477,73
482,64 -> 482,59 -> 482,64 -> 484,64 -> 484,55 -> 484,64 -> 486,64 -> 486,58 -> 486,64 -> 488,64 -> 488,54 -> 488,64 -> 490,64 -> 490,55 -> 490,64
464,162 -> 469,162
462,120 -> 462,112 -> 462,120 -> 464,120 -> 464,114 -> 464,120 -> 466,120 -> 466,119 -> 466,120 -> 468,120 -> 468,118 -> 468,120 -> 470,120 -> 470,119 -> 470,120
473,173 -> 477,173
462,85 -> 462,88 -> 454,88 -> 454,94 -> 470,94 -> 470,88 -> 466,88 -> 466,85
462,120 -> 462,112 -> 462,120 -> 464,120 -> 464,114 -> 464,120 -> 466,120 -> 466,119 -> 466,120 -> 468,120 -> 468,118 -> 468,120 -> 470,120 -> 470,119 -> 470,120
473,73 -> 473,77 -> 466,77 -> 466,82 -> 485,82 -> 485,77 -> 477,77 -> 477,73
498,13 -> 498,17 -> 497,17 -> 497,24 -> 505,24 -> 505,17 -> 502,17 -> 502,13
464,167 -> 468,167
468,107 -> 468,100 -> 468,107 -> 470,107 -> 470,104 -> 470,107 -> 472,107 -> 472,97 -> 472,107
480,151 -> 480,145 -> 480,151 -> 482,151 -> 482,150 -> 482,151 -> 484,151 -> 484,144 -> 484,151 -> 486,151 -> 486,148 -> 486,151 -> 488,151 -> 488,142 -> 488,151
476,154 -> 481,154
461,173 -> 465,173
468,123 -> 468,127 -> 460,127 -> 460,132 -> 474,132 -> 474,127 -> 473,127 -> 473,123
462,120 -> 462,112 -> 462,120 -> 464,120 -> 464,114 -> 464,120 -> 466,120 -> 466,119 -> 466,120 -> 468,120 -> 468,118 -> 468,120 -> 470,120 -> 470,119 -> 470,120
468,107 -> 468,100 -> 468,107 -> 470,107 -> 470,104 -> 470,107 -> 472,107 -> 472,97 -> 472,107
494,33 -> 498,33
482,64 -> 482,59 -> 482,64 -> 484,64 -> 484,55 -> 484,64 -> 486,64 -> 486,58 -> 486,64 -> 488,64 -> 488,54 -> 488,64 -> 490,64 -> 490,55 -> 490,64
477,70 -> 487,70 -> 487,69
473,156 -> 478,156
455,173 -> 459,173
478,162 -> 483,162
462,85 -> 462,88 -> 454,88 -> 454,94 -> 470,94 -> 470,88 -> 466,88 -> 466,85
480,151 -> 480,145 -> 480,151 -> 482,151 -> 482,150 -> 482,151 -> 484,151 -> 484,144 -> 484,151 -> 486,151 -> 486,148 -> 486,151 -> 488,151 -> 488,142 -> 488,151
467,173 -> 471,173
498,13 -> 498,17 -> 497,17 -> 497,24 -> 505,24 -> 505,17 -> 502,17 -> 502,13
462,120 -> 462,112 -> 462,120 -> 464,120 -> 464,114 -> 464,120 -> 466,120 -> 466,119 -> 466,120 -> 468,120 -> 468,118 -> 468,120 -> 470,120 -> 470,119 -> 470,120
484,41 -> 484,42 -> 495,42 -> 495,41
497,30 -> 501,30
480,151 -> 480,145 -> 480,151 -> 482,151 -> 482,150 -> 482,151 -> 484,151 -> 484,144 -> 484,151 -> 486,151 -> 486,148 -> 486,151 -> 488,151 -> 488,142 -> 488,151
498,13 -> 498,17 -> 497,17 -> 497,24 -> 505,24 -> 505,17 -> 502,17 -> 502,13
498,13 -> 498,17 -> 497,17 -> 497,24 -> 505,24 -> 505,17 -> 502,17 -> 502,13
468,123 -> 468,127 -> 460,127 -> 460,132 -> 474,132 -> 474,127 -> 473,127 -> 473,123
485,162 -> 490,162
482,37 -> 488,37 -> 488,36
482,64 -> 482,59 -> 482,64 -> 484,64 -> 484,55 -> 484,64 -> 486,64 -> 486,58 -> 486,64 -> 488,64 -> 488,54 -> 488,64 -> 490,64 -> 490,55 -> 490,64
491,30 -> 495,30
468,107 -> 468,100 -> 468,107 -> 470,107 -> 470,104 -> 470,107 -> 472,107 -> 472,97 -> 472,107
467,169 -> 471,169
452,171 -> 456,171
462,120 -> 462,112 -> 462,120 -> 464,120 -> 464,114 -> 464,120 -> 466,120 -> 466,119 -> 466,120 -> 468,120 -> 468,118 -> 468,120 -> 470,120 -> 470,119 -> 470,120
464,171 -> 468,171
462,120 -> 462,112 -> 462,120 -> 464,120 -> 464,114 -> 464,120 -> 466,120 -> 466,119 -> 466,120 -> 468,120 -> 468,118 -> 468,120 -> 470,120 -> 470,119 -> 470,120
484,41 -> 484,42 -> 495,42 -> 495,41
482,64 -> 482,59 -> 482,64 -> 484,64 -> 484,55 -> 484,64 -> 486,64 -> 486,58 -> 486,64 -> 488,64 -> 488,54 -> 488,64 -> 490,64 -> 490,55 -> 490,64
468,123 -> 468,127 -> 460,127 -> 460,132 -> 474,132 -> 474,127 -> 473,127 -> 473,123
474,160 -> 479,160
500,51 -> 504,51
494,45 -> 498,45
461,169 -> 465,169
468,123 -> 468,127 -> 460,127 -> 460,132 -> 474,132 -> 474,127 -> 473,127 -> 473,123
488,51 -> 492,51
458,167 -> 462,167
482,64 -> 482,59 -> 482,64 -> 484,64 -> 484,55 -> 484,64 -> 486,64 -> 486,58 -> 486,64 -> 488,64 -> 488,54 -> 488,64 -> 490,64 -> 490,55 -> 490,64
462,120 -> 462,112 -> 462,120 -> 464,120 -> 464,114 -> 464,120 -> 466,120 -> 466,119 -> 466,120 -> 468,120 -> 468,118 -> 468,120 -> 470,120 -> 470,119 -> 470,120
462,120 -> 462,112 -> 462,120 -> 464,120 -> 464,114 -> 464,120 -> 466,120 -> 466,119 -> 466,120 -> 468,120 -> 468,118 -> 468,120 -> 470,120 -> 470,119 -> 470,120
480,151 -> 480,145 -> 480,151 -> 482,151 -> 482,150 -> 482,151 -> 484,151 -> 484,144 -> 484,151 -> 486,151 -> 486,148 -> 486,151 -> 488,151 -> 488,142 -> 488,151
468,107 -> 468,100 -> 468,107 -> 470,107 -> 470,104 -> 470,107 -> 472,107 -> 472,97 -> 472,107
498,13 -> 498,17 -> 497,17 -> 497,24 -> 505,24 -> 505,17 -> 502,17 -> 502,13
480,151 -> 480,145 -> 480,151 -> 482,151 -> 482,150 -> 482,151 -> 484,151 -> 484,144 -> 484,151 -> 486,151 -> 486,148 -> 486,151 -> 488,151 -> 488,142 -> 488,151
466,137 -> 466,138 -> 484,138
462,120 -> 462,112 -> 462,120 -> 464,120 -> 464,114 -> 464,120 -> 466,120 -> 466,119 -> 466,120 -> 468,120 -> 468,118 -> 468,120 -> 470,120 -> 470,119 -> 470,120
468,107 -> 468,100 -> 468,107 -> 470,107 -> 470,104 -> 470,107 -> 472,107 -> 472,97 -> 472,107
468,107 -> 468,100 -> 468,107 -> 470,107 -> 470,104 -> 470,107 -> 472,107 -> 472,97 -> 472,107
468,107 -> 468,100 -> 468,107 -> 470,107 -> 470,104 -> 470,107 -> 472,107 -> 472,97 -> 472,107
482,64 -> 482,59 -> 482,64 -> 484,64 -> 484,55 -> 484,64 -> 486,64 -> 486,58 -> 486,64 -> 488,64 -> 488,54 -> 488,64 -> 490,64 -> 490,55 -> 490,64
462,120 -> 462,112 -> 462,120 -> 464,120 -> 464,114 -> 464,120 -> 466,120 -> 466,119 -> 466,120 -> 468,120 -> 468,118 -> 468,120 -> 470,120 -> 470,119 -> 470,120
468,123 -> 468,127 -> 460,127 -> 460,132 -> 474,132 -> 474,127 -> 473,127 -> 473,123
498,13 -> 498,17 -> 497,17 -> 497,24 -> 505,24 -> 505,17 -> 502,17 -> 502,13
467,160 -> 472,160
468,107 -> 468,100 -> 468,107 -> 470,107 -> 470,104 -> 470,107 -> 472,107 -> 472,97 -> 472,107
480,151 -> 480,145 -> 480,151 -> 482,151 -> 482,150 -> 482,151 -> 484,151 -> 484,144 -> 484,151 -> 486,151 -> 486,148 -> 486,151 -> 488,151 -> 488,142 -> 488,151
482,64 -> 482,59 -> 482,64 -> 484,64 -> 484,55 -> 484,64 -> 486,64 -> 486,58 -> 486,64 -> 488,64 -> 488,54 -> 488,64 -> 490,64 -> 490,55 -> 490,64
481,160 -> 486,160
480,151 -> 480,145 -> 480,151 -> 482,151 -> 482,150 -> 482,151 -> 484,151 -> 484,144 -> 484,151 -> 486,151 -> 486,148 -> 486,151 -> 488,151 -> 488,142 -> 488,151
480,151 -> 480,145 -> 480,151 -> 482,151 -> 482,150 -> 482,151 -> 484,151 -> 484,144 -> 484,151 -> 486,151 -> 486,148 -> 486,151 -> 488,151 -> 488,142 -> 488,151
497,48 -> 501,48
491,48 -> 495,48
455,169 -> 459,169
462,120 -> 462,112 -> 462,120 -> 464,120 -> 464,114 -> 464,120 -> 466,120 -> 466,119 -> 466,120 -> 468,120 -> 468,118 -> 468,120 -> 470,120 -> 470,119 -> 470,120
500,33 -> 504,33
480,151 -> 480,145 -> 480,151 -> 482,151 -> 482,150 -> 482,151 -> 484,151 -> 484,144 -> 484,151 -> 486,151 -> 486,148 -> 486,151 -> 488,151 -> 488,142 -> 488,151
449,173 -> 453,173
473,73 -> 473,77 -> 466,77 -> 466,82 -> 485,82 -> 485,77 -> 477,77 -> 477,73
480,151 -> 480,145 -> 480,151 -> 482,151 -> 482,150 -> 482,151 -> 484,151 -> 484,144 -> 484,151 -> 486,151 -> 486,148 -> 486,151 -> 488,151 -> 488,142 -> 488,151
482,64 -> 482,59 -> 482,64 -> 484,64 -> 484,55 -> 484,64 -> 486,64 -> 486,58 -> 486,64 -> 488,64 -> 488,54 -> 488,64 -> 490,64 -> 490,55 -> 490,64
470,171 -> 474,171
477,158 -> 482,158
468,123 -> 468,127 -> 460,127 -> 460,132 -> 474,132 -> 474,127 -> 473,127 -> 473,123
462,120 -> 462,112 -> 462,120 -> 464,120 -> 464,114 -> 464,120 -> 466,120 -> 466,119 -> 466,120 -> 468,120 -> 468,118 -> 468,120 -> 470,120 -> 470,119 -> 470,120
462,120 -> 462,112 -> 462,120 -> 464,120 -> 464,114 -> 464,120 -> 466,120 -> 466,119 -> 466,120 -> 468,120 -> 468,118 -> 468,120 -> 470,120 -> 470,119 -> 470,120
473,73 -> 473,77 -> 466,77 -> 466,82 -> 485,82 -> 485,77 -> 477,77 -> 477,73
482,64 -> 482,59 -> 482,64 -> 484,64 -> 484,55 -> 484,64 -> 486,64 -> 486,58 -> 486,64 -> 488,64 -> 488,54 -> 488,64 -> 490,64 -> 490,55 -> 490,64
473,73 -> 473,77 -> 466,77 -> 466,82 -> 485,82 -> 485,77 -> 477,77 -> 477,73
466,137 -> 466,138 -> 484,138
480,151 -> 480,145 -> 480,151 -> 482,151 -> 482,150 -> 482,151 -> 484,151 -> 484,144 -> 484,151 -> 486,151 -> 486,148 -> 486,151 -> 488,151 -> 488,142 -> 488,151
484,158 -> 489,158
462,85 -> 462,88 -> 454,88 -> 454,94 -> 470,94 -> 470,88 -> 466,88 -> 466,85
462,85 -> 462,88 -> 454,88 -> 454,94 -> 470,94 -> 470,88 -> 466,88 -> 466,85
488,33 -> 492,33
482,64 -> 482,59 -> 482,64 -> 484,64 -> 484,55 -> 484,64 -> 486,64 -> 486,58 -> 486,64 -> 488,64 -> 488,54 -> 488,64 -> 490,64 -> 490,55 -> 490,64
462,85 -> 462,88 -> 454,88 -> 454,94 -> 470,94 -> 470,88 -> 466,88 -> 466,85
480,151 -> 480,145 -> 480,151 -> 482,151 -> 482,150 -> 482,151 -> 484,151 -> 484,144 -> 484,151 -> 486,151 -> 486,148 -> 486,151 -> 488,151 -> 488,142 -> 488,151
482,64 -> 482,59 -> 482,64 -> 484,64 -> 484,55 -> 484,64 -> 486,64 -> 486,58 -> 486,64 -> 488,64 -> 488,54 -> 488,64 -> 490,64 -> 490,55 -> 490,64
488,160 -> 493,160
462,85 -> 462,88 -> 454,88 -> 454,94 -> 470,94 -> 470,88 -> 466,88 -> 466,85