commiting up

This commit is contained in:
Tanishq Dubey
2022-12-17 00:54:58 -05:00
parent e826b6db33
commit 36a4225e75
13 changed files with 1008 additions and 1 deletions

View File

@ -0,0 +1,5 @@
Sabqponm
abcryxxl
accszExk
acctuvwj
abdefghi

View File

@ -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
View 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))

View File

@ -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"]);