Day 12
This commit is contained in:
parent
4ed1b3307d
commit
7db39f82bf
@ -61,13 +61,11 @@ std::string solve(std::vector<stack_type> &stacks, std::vector<std::string> &lin
|
||||
;
|
||||
|
||||
if (problem == PROBLEM_1)
|
||||
{
|
||||
for (int i = 0; i < amount; ++i)
|
||||
{
|
||||
stacks[to - 1].push(stacks[from - 1].top());
|
||||
stacks[from - 1].pop();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < amount; ++i)
|
||||
|
67
day-11/sol.py
Normal file
67
day-11/sol.py
Normal file
@ -0,0 +1,67 @@
|
||||
|
||||
def get_neighbors(grid, current):
|
||||
neighbors = []
|
||||
y, x = current
|
||||
cur_height = ord(grid[y][x])
|
||||
if (grid[y][x] == "S"):
|
||||
cur_height = ord("a")
|
||||
for i in range(-1, 2):
|
||||
for j in range(-1, 2):
|
||||
if i == 0 and j == 0 or (i != 0 and j != 0):
|
||||
continue
|
||||
if (y + i) < 0 or (y + i) >= len(grid):
|
||||
continue
|
||||
if (x + j) < 0 or (x + j) >= len(grid[y + i]):
|
||||
continue
|
||||
new_height = ord(grid[y + i][x + j])
|
||||
if (grid[y + i][x + j] == "E"):
|
||||
new_height = ord("z")
|
||||
if abs(new_height - cur_height) <= 1 or new_height <= cur_height:
|
||||
neighbors.append((y + i, x + j))
|
||||
return neighbors
|
||||
|
||||
def bfs(grid, start, end):
|
||||
queue = []
|
||||
queue.append(start)
|
||||
visited = {}
|
||||
visited[start] = 0
|
||||
while queue:
|
||||
current = queue.pop(0)
|
||||
if current == end:
|
||||
return visited[current]
|
||||
for neighbor in get_neighbors(grid, current):
|
||||
if neighbor not in visited:
|
||||
queue.append(neighbor)
|
||||
visited[neighbor] = visited[current] + 1
|
||||
return False
|
||||
|
||||
def main():
|
||||
file = open("input", "r")
|
||||
grid = file.readlines()
|
||||
file.close()
|
||||
|
||||
start = (0, 0)
|
||||
end = (0, 0)
|
||||
|
||||
for i in range(len(grid)):
|
||||
for j in range(len(grid[i])):
|
||||
if grid[i][j] == "S":
|
||||
start = (i, j)
|
||||
elif grid[i][j] == "E":
|
||||
end = (i, j)
|
||||
|
||||
best = bfs(grid, start, end)
|
||||
print(best)
|
||||
|
||||
for i in range(len(grid)):
|
||||
for j in range(len(grid[i])):
|
||||
if grid[i][j] == "a":
|
||||
this_as_start = bfs(grid, (i, j), end)
|
||||
if this_as_start and this_as_start < best:
|
||||
best = this_as_start
|
||||
|
||||
print(best)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in New Issue
Block a user