From 17d1b3956ac2ad49ff12cba3e0218a1dddb2821f Mon Sep 17 00:00:00 2001 From: Aelita4 Date: Tue, 13 Dec 2022 00:41:09 +0100 Subject: [PATCH] 12_1 --- day12/heightmap.txt | 41 ++++++++++++++++++ day12/index.js | 100 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 141 insertions(+) create mode 100644 day12/heightmap.txt create mode 100644 day12/index.js diff --git a/day12/heightmap.txt b/day12/heightmap.txt new file mode 100644 index 0000000..20c985b --- /dev/null +++ b/day12/heightmap.txt @@ -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 \ No newline at end of file diff --git a/day12/index.js b/day12/index.js new file mode 100644 index 0000000..3ada0d8 --- /dev/null +++ b/day12/index.js @@ -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 }); \ No newline at end of file