This commit is contained in:
Aelita4 2022-12-13 00:41:09 +01:00
parent c23561a53a
commit 17d1b3956a
Signed by: Aelita4
GPG Key ID: E44490C2025906C1
2 changed files with 141 additions and 0 deletions

41
day12/heightmap.txt Normal file
View File

@ -0,0 +1,41 @@
abcccccaaaccccaacaaccaaaaaaaaaaaaaaaaaaaaccccccccccccccccccccccccccccccccccaaaaaa
abcccccaaaacccaaaaaccaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccccccccccccccccaaaa
abcccccaaaaccaaaaaccccaaaccaaaaaacccacaaaaccccccccccccccccaaaccccccccccccccccaaaa
abcccccaaacccaaaaaaccccccccaaaaaacccccaaccccccccccccccccccaaaccccccccccccccccaaaa
abcccccccccccccaaaacccccccaaaaaaaaccccccccccccccccccccccccaaacccccccccccccccaaaaa
abccccccaacccccaacccccccccaaaaaaaaccccccccccccccccccccccccaaaaccaaacccccccccccccc
abccccccaacccccccccccccccaaacccaaaacccaacaaccccccccccacaccaaacaajaacccccccccccccc
abcccaaaaaaaaccccacccccccaaaccccaaacccaaaaaccccccccccaaaaaaajjjjkkkccccccaacccccc
abcccaaaaaaaacaaaacccccccccccccccccccaaaaaccccccccciiiijjjjjjjjjkkkkcaaaaaacccccc
abcccccaaaacccaaaaaacccccccccccccccccaaaaaacccccciiiiiijjjjjjjrrrkkkkaaaaaaaacccc
abcccccaaaaacccaaaacccccccccaacccccccccaaaaccccciiiiiiiijjjjrrrrrsskkaaaaaaaacccc
abccccaaaaaaccaaaaacccccccccaaaacccccccaccccccciiiiqqqqrrrrrrrrrssskkkaaaaaaacccc
abaaccaaccaaccaacaacccccccaaaaaaccccccccccccccciiiqqqqqrrrrrrruussskkkaaaaacccccc
abaaaacccccccccccccccccccccaaaaccccccccaaaccccciiqqqqqttrrrruuuuussskkaaaaacccccc
abaaaacccccccccccccccccccccaaaaaccccccccaaaaccchiqqqtttttuuuuuuuussskkcccaacccccc
abaaacccccaaaccacccccccccccaacaaccccccaaaaaaccchhqqqtttttuuuuxxuussslllcccccccccc
abaaaaccccaaaaaacaaccccccaccccccccccccaaaaacccchhqqqttxxxxuuxxyyusssllllccccccccc
abacaaccccaaaaaacaaaaaaaaaaccccccccccccaaaaaccchhqqqttxxxxxxxxyuusssslllccccccccc
abcccccccaaaaaaacaaaaaaaaaccccaacccccccaaccaccchhhqqtttxxxxxxyyvvvsssslllcccccccc
abcccccccaaaaaaaaaaaaaaaaaccccaaaaccccccccccccchhhppqttxxxxxyyyvvvvsqqqlllccccccc
SbcccaaccaaaaaaaaaaaaaaaaaacaaaaaacccccccccccchhhhpptttxxxEzzyyyyvvvqqqqlllcccccc
abcccaaccccaaacaaaaaaaaaaaaacaaaaccccccccccccchhhppptttxxxyyyyyyyyvvvqqqlllcccccc
abaaaaaaaacaaacaaaaaaaaaaaaacaaaaacaaccccccccchhpppsssxxyyyyyyyyvvvvvqqqlllcccccc
abaaaaaaaaccccccccaaacaaaccccaacaaaaaccccccaagggpppsswwwwwwyyyvvvvvvqqqmmmmcccccc
abccaaaaccccaacaacaaacaaacccccccccaaacaaaccaagggppssswwwwwwyyywvvqqqqqqmmmccccccc
abcaaaaaccccaaaaacaaccaaccaaaccaaaaaaaaaaaaaagggppsssswwwswwyywvrqqqqmmmmcccccccc
abcaaaaaaccaaaaacccccccccaaaaccaaaaaaaaaacaaagggpppssssssswwwwwwrrqmmmmmccccccccc
abcaacaaaccaaaaaaccccccccaaaaccccaaaaaacccaaagggppppssssssrwwwwrrrmmmmmdccccccccc
abccccaaaccaaaaaaccccccccaaaaccccaaaaaacccaacggggpooooooosrrwwwrrnmmmddddcacccccc
abccccaaaaaaaacccccccccccccccccccaaaaaaaccccccggggoooooooorrrrrrrnnmdddddaaaacccc
abcccccaaaaaaccccccccccccccccccccaaacaaacccccccggggfffooooorrrrrrnnddddaaaaaacccc
abccaaaaaaaacccccccccccccccccccccaccccccccccccccggffffffooonrrrrnnndddaaaaaaacccc
abccaaaaaaaaaccccaacccccccccccccccccccccccccccccccfffffffoonnnnnnndddcaaaaacccccc
abccaaaaaaaaaacccaaccccccccccccccaccccccccccccccccccccffffnnnnnnnedddaaaaaacccccc
abcccccaaaaaaaaaaaacccccccaccccaaacccccccccccccccccccccfffeennnneeedcccccaacccccc
abcccccaaacccaaaaaaaaccccaaacccaaaccacccccccccccccccccccafeeeeeeeeecccccccccccccc
abcccccaaccccaaaaaaaaacccaaaaaaaaaaaaccccccaaaccccccccccaaeeeeeeeeeccccccccccccca
abaccccccccccaaaaaaaaacccaaaaaaaaaaacccccccaaaaacccccccaaaaceeeeecccccccccccaccca
abaccccccccccaaaaaaaaccaaaaaaaaaaaaaacccccaaaaaccccccccaaaccccaaacccccccccccaaaaa
abaccccccccccaaaaaaacccaaaaaaaaaaaaaacccccaaaaacccccccccccccccccccccccccccccaaaaa
abaccccccccccaccaaaacccaaaaaaaaaaaaaaccccccaaaaaccccccccccccccccccccccccccccaaaaa

100
day12/index.js Normal file
View File

@ -0,0 +1,100 @@
import { readFileSync } from "fs";
const input = readFileSync("heightmap.txt", "utf-8");
function BFS(map, visited = [], toCheck = [], endingPos, dimensions) {
const whereFrom = {};
whereFrom[visited[0]] = null;
while(toCheck.length > 0) {
const positionString = toCheck.shift();
const positionObj = { x: parseInt(positionString.split(":")[0]), y: parseInt(positionString.split(":")[1])};
if(positionObj.x - 1 >= 0 && (
(map[positionObj.y][positionObj.x - 1].charCodeAt(0) - map[positionObj.y][positionObj.x].charCodeAt(0)) === 1 ||
(map[positionObj.y][positionObj.x - 1].charCodeAt(0) - map[positionObj.y][positionObj.x].charCodeAt(0)) < 1
)) {
const str = `${positionObj.x - 1}:${positionObj.y}`;
if(!visited.includes(str)) {
toCheck.push(str);
visited.push(str);
whereFrom[str] = positionString;
}
}
if(positionObj.x + 1 < dimensions.width && (
(map[positionObj.y][positionObj.x + 1].charCodeAt(0) - map[positionObj.y][positionObj.x].charCodeAt(0)) === 1 ||
(map[positionObj.y][positionObj.x + 1].charCodeAt(0) - map[positionObj.y][positionObj.x].charCodeAt(0)) < 1
)) {
const str = `${positionObj.x + 1}:${positionObj.y}`;
if(!visited.includes(str)) {
toCheck.push(str);
visited.push(str);
whereFrom[str] = positionString;
}
}
if(positionObj.y - 1 >= 0 && (
(map[positionObj.y - 1][positionObj.x].charCodeAt(0) - map[positionObj.y][positionObj.x].charCodeAt(0)) === 1 ||
(map[positionObj.y - 1][positionObj.x].charCodeAt(0) - map[positionObj.y][positionObj.x].charCodeAt(0)) < 1
)) {
const str = `${positionObj.x}:${positionObj.y - 1}`;
if(!visited.includes(str)) {
toCheck.push(str);
visited.push(str);
whereFrom[str] = positionString;
}
}
if(positionObj.y + 1 < dimensions.height && (
(map[positionObj.y + 1][positionObj.x].charCodeAt(0) - map[positionObj.y][positionObj.x].charCodeAt(0)) === 1 ||
(map[positionObj.y + 1][positionObj.x].charCodeAt(0) - map[positionObj.y][positionObj.x].charCodeAt(0)) < 1
)) {
const str = `${positionObj.x}:${positionObj.y + 1}`;
if(!visited.includes(str)) {
toCheck.push(str);
visited.push(str);
whereFrom[str] = positionString;
}
}
if(positionObj.x === endingPos.x && positionObj.y === endingPos.y) {
let count = 0;
let currentPoint = positionString;
while(1) {
currentPoint = whereFrom[currentPoint]
if(currentPoint === null) break;
count++;
}
console.log(count)
break;
}
}
}
let index = 0;
const heightMap = [];
const start = { x: 0, y: 0 };
const end = { x: 0, y: 0 };
input.split('\n').forEach(line => {
heightMap[index] = [...line.split("")];
if(line.includes("S")) {
const startingIndex = heightMap[index].indexOf("S")
heightMap[index][startingIndex] = "a";
start.x = startingIndex;
start.y = index;
}
if(line.includes("E")) {
const endingIndex = heightMap[index].indexOf("E")
heightMap[index][endingIndex] = "z";
end.x = endingIndex;
end.y = index;
}
index++;
});
BFS(heightMap, [`${start.x}:${start.y}`], [`${start.x}:${start.y}`], end, { height: index, width: heightMap[0].length });