12_1
This commit is contained in:
		
							parent
							
								
									c23561a53a
								
							
						
					
					
						commit
						17d1b3956a
					
				| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			@ -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 });
 | 
			
		||||
		Loading…
	
		Reference in New Issue