commiting up
This commit is contained in:
41
day12/input
41
day12/input
@ -0,0 +1,41 @@
|
||||
abcccaaaaaaccccccccaaaaaccccccaaaaaaccccccaaaaaaaacccaaaaaaaccaaaacccccccccccccccccccccccccaaaaaacccccccccccccccccccccccccccccaaaaaa
|
||||
abcccaaaaaacccccccaaaaaaccccaaaaaaaacccccccaaaaaaaaaaaaaaaaccaaaaacccccccccccccccccccccccccaaaaaacccccccccccccccccccccccccccccaaaaaa
|
||||
abccccaaaaacaaaccaaaaaaaacccaaaaaaaaacccccccaaaaaaaaaaaaaaaacaaaaaacccccccccaaacccccccccccaaaaaaaaccccccccccaaccccccccccccccccaaaaaa
|
||||
abccccaaaaccaaaaaaaaaaaaacccaaaaaaaaaacccccaaaaaaaaaaaaaaaaaaacaaaacccccccccaaaacccccccccaaaaaaaaaacccccccccaaaccccccccccccccccccaaa
|
||||
abcccccccccaaaaaacccaacccccccccaaacaaaccccccaacccccccaaaaaaaaacaacccccccccccaaaacccccccccaaaaaaaaaacccccccccaaaccacaaccccccccccccaaa
|
||||
abcccccccccaaaaaacccaacccccccccaaacccccccccccccccccccaaaacaaaacccccccaacaaccaaaccccccccccaccaaaaacacccccccccaaaacaaaaccccccccccccaac
|
||||
abccccccccccaaaaacccccccccccccccacccaaaacccccccccccccaaaacccccccccccccaaaacccccccccccaacccccaaaaccccccccjjjjaaaaaaaaaccccccccccccccc
|
||||
abccccccccccaaaacccccccccccccccccccaaaaacccccccccccccaaaccccccccccccccaaaaacccccccccaaaaaacccaaccccccccjjjjjjkkaaaacccccccccaacccccc
|
||||
abcccccaaccccccccccccccccccccccccccaaaaaacccccccccccccaacccccccccccccaaaaaaccccccccccaaaaaccccccccccccjjjjjjjkkkkaacccccaacaaacccccc
|
||||
abccaaaacccccccccccccccccccccccccccaaaaaaccccccccccccccccccccccccccccaaaacaccccccccaaaaaaaccccaacccccjjjjoooookkkkkkkklllaaaaaaacccc
|
||||
abccaaaaaacccccccccccccccccccccccccaaaaacccccccccccccccccccccccccccccccaaccccccccccaaaaaaaaccaaaaccccjjjoooooookkkkkkkllllaaaaaacccc
|
||||
abcccaaaaacccccccccccccccccccccccccccaaaccccccccaaaacccccccccccccccccccccccccccccccaaaaaaaaccaaaaccccjjooooooooppkkppplllllaccaacccc
|
||||
abccaaaaaccccccccccccaccccccccccccccccccccccccccaaaacccccccccccccccccccccccccccccccccaaacacccaaaacccijjooouuuuoppppppppplllccccccccc
|
||||
abcccccaacccccccccccaaaaaaaaccccccccccccccccccccaaaaccccaaccccccccaaacccccccccccccaacaaccccccccccccciijoouuuuuuppppppppplllcccaccccc
|
||||
abcccccccccccccccccccaaaaaaccccccccccccccccccccccaaccccaaaacccccccaaaaccccccccccaaaaaaccccccccccccciiiiootuuuuuupuuuvvpppllccccccccc
|
||||
abcccccccccccccccccccaaaaaaccaaaaacccccccccccccccccccccaaaacccccccaaaaccccccccccaaaaaaccccccccccccciiinnotuuxxxuuuuvvvpppllccccccccc
|
||||
abccccccccccccccacccaaaaaaaacaaaaaaacccccccccccccccccccaaaacccccccaaacccccaaaaccaaaaaccccaaccccccciiiinnnttxxxxuuyyyvvqqqllccccccccc
|
||||
abcccccccccccaaaaccaaaaaaaaaaaaaaaaaaccaacccccccccccccccccccccccccccccccccaaaacccaaaaaccaaacccccciiinnnnnttxxxxxyyyyvvqqqllccccccccc
|
||||
abaaaacccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccccccccccccccaaaacccaaaaaacaaaccccciiinnnnttttxxxxxyyyyvvqqmmmccccccccc
|
||||
abaaaaccccccccaaaaacccaaaaacaaaaaacaaaaaaccccccccccccccccaaccccccccccccccccaacccccccaaaaaaaaaaciiinnnnttttxxxxxyyyyvvqqqmmmccccccccc
|
||||
SbaaaacccccccaaaaaccccaaaaaccaaaaaaaaaaaccccccccccccccccaaacaacccccccccccccccccccccccaaaaaaaaachhhnnntttxxxEzzzzyyvvvqqqmmmccccccccc
|
||||
abaaaacccccccaacaacccccaaaaaaaacaaaaaaaaaccccccccccccccccaaaaaccccccccccccccccccccccccaaaaaaacchhhnnntttxxxxxyyyyyyvvvqqmmmdddcccccc
|
||||
abaaaacccccccccccccccccccaaaaaacaaaaaaaaaacccccccccccccaaaaaaccccccccaaaccccccccccccccaaaaaaccchhhnnntttxxxxywyyyyyyvvvqqmmmdddccccc
|
||||
abaacccccccccccccccccccaaaaaaacccccaaaaaaacccccccccccccaaaaaaaacccccaaaacccccccccccccaaaaaaacaahhhmmmttttxxwwyyyyyyyvvvqqmmmdddccccc
|
||||
abcccccccccccccccccccccaaaaaaacaaccaaacccccccccccccccccaacaaaaacccccaaaacccccccccccccaaacaaaaaahhhmmmmtsssswwyywwwwvvvvqqqmmdddccccc
|
||||
abcccccccccccccccaaaccccaaaaaaaaaacaaccaaccccccccccccccccaaacaccccccaaaacccccccccccccccccaaaaacahhhmmmmmsssswwywwwwwvvrrqqmmdddccccc
|
||||
abcccccccccccccaaaaaaccccaaaaaaaaaccaaaacccccccccccccccccaacccccccccccccccccccccccaaaccccaaaaaaahhhhhmmmmssswwwwwrrrrrrrrmmmmddccccc
|
||||
abcccccccccccccaaaaaaccccaaaaaaaaaaaaaaaaaccccccccccccccccccccccccccccccccccccccaaaaaacccccaaaaachhhhhmmmmsswwwwrrrrrrrrrkkmdddccccc
|
||||
abccccccccccccccaaaaaccccccaaaaaaaaaaaaaaaccccccccccccccccccccccccccccccccccccccaaaaaaccccaaaaacccchhggmmmssswwrrrrrkkkkkkkkdddacccc
|
||||
abccaaaacccccccaaaaacccccccccaaaaaacaaaaacccccccccccccccccccccccccccccccccccccccaaaaaaccccaacaaaccccggggmmsssssrrlkkkkkkkkkdddaccccc
|
||||
abccaaaacccccccaaaaacccccccccaaaaaaccccaacccccccccccccccccccccccccccccccccccccccaaaaaccccccccaaccccccgggmllssssrllkkkkkkkeeeddaccccc
|
||||
abccaaaacccccccaaacccccccccccaaaaaacccccccccccccccccccaacccccccccccccccccccccccaaaaaacccccccccccccccccggllllssslllkkeeeeeeeeeaaacccc
|
||||
abcccaaccccccccaaacaaaccccccaaaaaaaaaaacccccccccccccaaaaaacccccccccccccccccccccaaacaaacccccaacccccccccggglllllllllfeeeeeeeeaaaaacccc
|
||||
abccccccccccaaaaaaaaaaccccccccccccaccaaaccacccccccccaaaaaaccccaaccaacccaaccccccaaaaaaacccccaaccccccccccggglllllllfffeeecccaaaaaacccc
|
||||
abccccccccccaaaaaaaaacccccccccccccccaaaaaaaccccccccccaaaaaccccaaaaaacccaaaaaaccaaaaaacccaaaaaaaacccccccggggllllfffffccccccaacccccccc
|
||||
abcccccccccccaaaaaaacccccccccccccccccaaaaaaccaacccccaaaaaccccccaaaaacccaaaaaacaaaaaaacccaaaaaaaaccccccccgggffffffffccccccccccccccccc
|
||||
abccccccccccccaaaaaaacccccccccccccaaaaaaaaacaaaaccccaaaaacaaaaaaaaaacaaaaaaacaaaaaaaaaccccaaaacccccccccccggffffffacccccccccccccccaaa
|
||||
abccccccccccccaaaaaaacaaccccccccccaaaaaaaaacaaaacccccaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaacccaaaaacccccccccccaffffaaaaccccccccccccccaaa
|
||||
abccccccccccccaaacaaaaaacccccccccccaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaacccaaacaaaccaaaaaacccccccccccccccccaaaccccccccccccccaaa
|
||||
abccccccccccccaaccaaaaaccccccccccccccaaaaaaaccccaaaaaaaaaaaaccccaacccccaaaaaacccaaaccccccaaccaacccccccccccccccccaaacccccccccccaaaaaa
|
||||
abcccccccccccccccaaaaaaaaccccccccccccaacccacccccccaaaaaaaaaaccccaacccccaaccccccccaccccccccccccccccccccccccccccccccccccccccccccaaaaaa
|
||||
|
53
day12/main.py
Normal file
53
day12/main.py
Normal file
@ -0,0 +1,53 @@
|
||||
import string
|
||||
from collections import defaultdict
|
||||
from pprint import pprint
|
||||
|
||||
inputs = [x.strip() for x in open("input").readlines()]
|
||||
|
||||
points = {}
|
||||
graph = defaultdict(list)
|
||||
start, starts, end = None, [], None
|
||||
for y, line in enumerate(inputs):
|
||||
for x, letter in enumerate(line):
|
||||
point = complex(x, y)
|
||||
if letter == "S":
|
||||
value = 0
|
||||
start = point
|
||||
starts.append(point)
|
||||
elif letter == "a":
|
||||
value = 0
|
||||
starts.append(point)
|
||||
elif letter == "E":
|
||||
value = 25
|
||||
end = point
|
||||
else:
|
||||
value = string.ascii_lowercase.index(letter)
|
||||
points[point] = value
|
||||
|
||||
for point in points:
|
||||
for neighbor in [1 + 0j, -1 + 0j, 0 + 1j, 0 - 1j]:
|
||||
if (point + neighbor) in points:
|
||||
graph[point].append(point + neighbor)
|
||||
|
||||
|
||||
def dijkstra(graph, source):
|
||||
Q = list(graph.keys())
|
||||
dist = {v: float("inf") for v in graph}
|
||||
dist[source] = 0
|
||||
|
||||
while Q:
|
||||
u = min(Q, key=dist.get)
|
||||
Q.remove(u)
|
||||
|
||||
for v in graph[u]:
|
||||
alt = dist[u] + 1
|
||||
if alt < dist[v] and points[u] - points[v] <= 1:
|
||||
dist[v] = alt
|
||||
|
||||
return dist
|
||||
|
||||
|
||||
paths = dijkstra(graph, end)
|
||||
pprint(paths)
|
||||
print(paths[start])
|
||||
print(min(paths[s] for s in starts))
|
@ -7,8 +7,116 @@ var rows = fileString.split("\n");
|
||||
rows = rows.map(val => {
|
||||
return val.trim();
|
||||
});
|
||||
|
||||
rows = rows.filter(val => {
|
||||
return val.length > 0;
|
||||
});
|
||||
|
||||
console.log(rows);
|
||||
const grid = rows.map(val => {
|
||||
return val.split("");
|
||||
})
|
||||
|
||||
var targetPos = [0,0];
|
||||
for (var i = 0; i < grid.length; i++) {
|
||||
for (var j = 0; j < grid[i].length; j++) {
|
||||
if (grid[i][j] == "E") {
|
||||
console.log("target set", i, j);
|
||||
targetPos = [i, j];
|
||||
grid[i][j] = "z";
|
||||
}
|
||||
if (grid[i][j] == "S") {
|
||||
grid[i][j] = "a";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Build Graph
|
||||
var graph: {} = {};
|
||||
for (var i = 0; i < grid.length; i++) {
|
||||
for (var j = 0; j < grid[i].length; j++) {
|
||||
const idx = JSON.stringify([i, j])
|
||||
const height = grid[i][j].charCodeAt(0);
|
||||
graph[idx] = {
|
||||
"value": height,
|
||||
"next": {}
|
||||
};
|
||||
if (!((i - 1) < 0)) {
|
||||
if ((grid[i - 1][j].charCodeAt(0) - height <= 1) && (grid[i - 1][j].charCodeAt(0) - height >= -1)) {
|
||||
const nidx = JSON.stringify([i - 1, j])
|
||||
graph[idx]["next"][nidx] = 1;
|
||||
}
|
||||
}
|
||||
if (!((i + 1) >= grid.length)) {
|
||||
if ((grid[i + 1][j].charCodeAt(0) - height <= 1) && (grid[i + 1][j].charCodeAt(0) - height >= -1)) {
|
||||
const nidx = JSON.stringify([i + 1, j])
|
||||
graph[idx]["next"][nidx] = 1;
|
||||
}
|
||||
}
|
||||
if (!((j - 1) < 0)) {
|
||||
if ((grid[i][j - 1].charCodeAt(0) - height <= 1) && (grid[i][j - 1].charCodeAt(0) - height >= -1)) {
|
||||
const nidx = JSON.stringify([i, j - 1])
|
||||
graph[idx]["next"][nidx] = 1;
|
||||
}
|
||||
}
|
||||
if (!((j + 1) >= grid[i].length)) {
|
||||
if ((grid[i][j + 1].charCodeAt(0) - height <= 1) && (grid[i][j + 1].charCodeAt(0) - height >= -1)) {
|
||||
const nidx = JSON.stringify([i, j + 1])
|
||||
graph[idx]["next"][nidx] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function closestNode(distances: {}, visited) {
|
||||
var shortest = null;
|
||||
for (const node in distances) {
|
||||
var curentShortest = shortest === null || distances[node] < distances[shortest];
|
||||
if (curentShortest && !visited.includes(node)) {
|
||||
shortest = node;
|
||||
}
|
||||
}
|
||||
return shortest;
|
||||
}
|
||||
|
||||
function findShortestPath(g:{}, startN: string, endN: string) {
|
||||
var distances = {};
|
||||
distances[endN] = Infinity;
|
||||
distances = Object.assign(distances, g[startN]["next"]);
|
||||
|
||||
var parents = {endN: null};
|
||||
for (const neighbor in g[startN]["next"]) {
|
||||
parents[neighbor] = startN;
|
||||
}
|
||||
|
||||
var visited = [];
|
||||
var node = closestNode(distances, visited);
|
||||
while (node) {
|
||||
var distance = distances[node];
|
||||
var children = g[node]["next"];
|
||||
for (const child in children) {
|
||||
if (child === startN) {
|
||||
continue;
|
||||
} else {
|
||||
var newDistance = distance + children[child];
|
||||
if (!distances[child] || distances[child] > newDistance) {
|
||||
distances[child] = newDistance;
|
||||
parents[child] = node;
|
||||
}
|
||||
}
|
||||
}
|
||||
visited.push(node);
|
||||
node = closestNode(distances, visited);
|
||||
}
|
||||
var shortestPath = [endN];
|
||||
var parent = parents[endN];
|
||||
while (parent) {
|
||||
shortestPath.push(parent);
|
||||
parent = parents[parent];
|
||||
}
|
||||
shortestPath.reverse();
|
||||
return {d: distances[endN], s: shortestPath, dd: distances}
|
||||
}
|
||||
const res = findShortestPath(graph, JSON.stringify([0,0]), JSON.stringify(targetPos))
|
||||
console.log(res["dd"], res["d"]);
|
||||
|
||||
|
Reference in New Issue
Block a user