parent
d8611b368b
commit
548da07386
@ -0,0 +1,106 @@
|
||||
lines = open("inputs/day11.txt").readlines()
|
||||
|
||||
def mkmat(lines):
|
||||
mat = [[0 if x == "." else 1 for x in line.strip("\n")] for line in lines]
|
||||
return mat
|
||||
|
||||
def empty_spaces(mat):
|
||||
empty_lines = []
|
||||
for idx, line in enumerate(mat):
|
||||
if sum(line) == 0:
|
||||
empty_lines.append(idx)
|
||||
empty_cols = []
|
||||
for i in range(len(mat[0])):
|
||||
col = [x[i] for x in mat]
|
||||
if sum(col) == 0:
|
||||
empty_cols.append(i)
|
||||
return empty_lines, empty_cols
|
||||
|
||||
def expand_mat(mat):
|
||||
empty_lines = []
|
||||
for idx, line in enumerate(mat):
|
||||
if sum(line) == 0:
|
||||
empty_lines.append(idx)
|
||||
while empty_lines:
|
||||
idx = empty_lines.pop(0)
|
||||
mat.insert(idx, [0 for x in range(len(mat[0]))])
|
||||
if empty_lines:
|
||||
empty_lines = [x+1 for x in empty_lines]
|
||||
empty_cols = []
|
||||
for i in range(len(mat[0])):
|
||||
col = [x[i] for x in mat]
|
||||
if sum(col) == 0:
|
||||
empty_cols.append(i)
|
||||
while empty_cols:
|
||||
idx = empty_cols.pop(0)
|
||||
for line in mat:
|
||||
line.insert(idx, 0)
|
||||
if empty_cols:
|
||||
empty_cols = [x+1 for x in empty_cols]
|
||||
return mat
|
||||
|
||||
def galaxies(mat):
|
||||
coords = []
|
||||
for idx, line in enumerate(mat):
|
||||
for jdx, p in enumerate(line):
|
||||
if p == 1:
|
||||
coords.append((idx, jdx))
|
||||
return coords
|
||||
|
||||
def bfsdistances(coords, mat):
|
||||
dists = [[0 for x in range(len(coords))] for y in range(len(coords))]
|
||||
for idx, coord in enumerate(coords):
|
||||
paths = bfs(coord, mat)
|
||||
for jdx, path in enumerate(paths):
|
||||
dists[idx][jdx] = len(path)
|
||||
return dists
|
||||
|
||||
def manhattendistances(coords, expansions, expansionrate=1000000-1):
|
||||
(rows, cols) = expansion
|
||||
dists = [[0 for x in range(len(coords))] for y in range(len(coords))]
|
||||
for i, coord1 in enumerate(coords):
|
||||
for j, coord2 in enumerate(coords):
|
||||
emptyrows = len([x for x in range(coord1[0], coord2[0]+1) if x in rows]) + len([x for x in range(coord1[0], coord2[0]+1)[::-1] if x in rows])
|
||||
emptycols = len([x for x in range(coord1[1], coord2[1]+1) if x in cols]) + len([x for x in range(coord1[1], coord2[1]+1)[::-1] if x in cols])
|
||||
d = manhatten(coord1, coord2) + ((emptyrows+emptycols) * expansionrate)
|
||||
dists[i][j] = d
|
||||
return dists
|
||||
|
||||
def manhatten(x,d):
|
||||
(x,y) = x
|
||||
(dx, dy) = d
|
||||
return abs(x-dx) + abs(y-dy)
|
||||
|
||||
def bfs(start, maze):
|
||||
paths = []
|
||||
directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]
|
||||
stack = [(start, [])]
|
||||
visited = [[0 for x in range(len(mat[0]))] for y in range(len(mat))]
|
||||
visited[start[0]][start[1]] = 1
|
||||
while stack:
|
||||
(x,y), path = stack.pop(0)
|
||||
for dx, dy in directions:
|
||||
newx, newy = x+dx, y+dy
|
||||
if 0 <= newx < len(mat) and 0 <= newy < len(mat[0]) and visited[newx][newy] == 0:
|
||||
new_path = path + [(newx, newy)]
|
||||
if mat[newx][newy] == 1:
|
||||
paths.append(new_path)
|
||||
else:
|
||||
stack.append(((newx, newy), new_path))
|
||||
visited[newx][newy] = 1
|
||||
|
||||
return paths
|
||||
|
||||
|
||||
|
||||
mat = mkmat(lines)
|
||||
expansion = empty_spaces(mat)
|
||||
#mat = expand_mat(mat)
|
||||
coords = galaxies(mat)
|
||||
dists = manhattendistances(coords, expansion)
|
||||
s = 0
|
||||
for d in dists:
|
||||
# print(len(d))
|
||||
s += sum(d)
|
||||
print(s//2)
|
||||
|
@ -0,0 +1,140 @@
|
||||
................................................#.........#............................................#....................................
|
||||
..#.............#......#.............................................#...........................................................#..........
|
||||
..............................................................#..............................#..............................................
|
||||
.................................................................................................................#..........................
|
||||
...........#...........................#...............................................#..................................#.............#...
|
||||
............................#..................#.....#..........................#...........................................................
|
||||
..................................#................................#........................................................................
|
||||
...........................................................................#................................................................
|
||||
.....#...................................#......................................................#.......................#...........#.....#.
|
||||
.....................#........#....................#....................................................#...................................
|
||||
......................................................................#.....................................................................
|
||||
...........................................................#.................................#..............................................
|
||||
........#..................#....................#....................................................#......................................
|
||||
#.............#....................................................#..............#.............................#...........................
|
||||
...................#.............#...................................................................................#...............#......
|
||||
.............................................................................#.............................................................#
|
||||
.........................................................................................................#..................................
|
||||
....#...........................................................................................#...........................#.....#.........
|
||||
.....................#.......................#.........#....................................................................................
|
||||
#............#.........................................................................#....................#...............................
|
||||
................................#..................#...........#......#............................#...................#.......#............
|
||||
.......................................................................................................................................#....
|
||||
...................................................................................#........................................................
|
||||
.........................#.............#...................................................................................#................
|
||||
............................................................................................................................................
|
||||
..........#..............................................................#......#.........#..........#......................................
|
||||
............................................................................................................................................
|
||||
.................................................................................................#............................#.............
|
||||
................#...............................#............#.....................#........................................................
|
||||
.#........................#..........................#......................................................#.......................#.......
|
||||
.......#....................................#................................#..............................................................
|
||||
.................................#.....................................#..................................................................#.
|
||||
........................................................#.............................#...............................#........#............
|
||||
.....................#...................#.....#...............#............................................................................
|
||||
.............#...................................................................................................#..........................
|
||||
................................................................................................#.....#...............................#.....
|
||||
.................#................#................#........................................................................................
|
||||
.#..........................#.............................#.......#.......#................................................................#
|
||||
.............................................#.............................................................#................................
|
||||
...........#.................................................................................#...............................#..............
|
||||
.....................#.................................#.......#..................................................................#.....#...
|
||||
.......#..............................#..............................................................#......................................
|
||||
#...............................#.....................................#...............#........................#.......#....................
|
||||
...........................................................................#.....#.........................................................#
|
||||
...........................................................................................#................................................
|
||||
........................................................#................................................#.......................#..........
|
||||
.........#............#............................................#.................................................#.....#................
|
||||
............................................................................................................................................
|
||||
......................................#......#........................................................#.........#...........................
|
||||
.............#.....#......#..........................#......................................................................................
|
||||
......#................................................................................................................................#....
|
||||
.............................................................................................................#..............................
|
||||
..#.......#.............................#.....................#..................#........#.................................................
|
||||
............................................................................................................................................
|
||||
......................................................................................#...............................#.....................
|
||||
..................#...........................#...........................#.........................#.........................#.............
|
||||
............................................................................................................................................
|
||||
......................................#..................................................#.........................................#........
|
||||
.......................#.....#................................................................#.............#............#..................
|
||||
.....#.............................................#.............#..........................................................................
|
||||
.............#...........................................................#.......#..................................#...........#...........
|
||||
.................................#..........................................................................................................
|
||||
.............................................#...........#..................................................................................
|
||||
.......#......................................................#............................#.........#........#.............................
|
||||
.....................#................................................#...........................................................#.........
|
||||
...............#...................#...............#.......................................................................#................
|
||||
#..........................#......................................................................#.........................................
|
||||
.............................................................................#..............................................................
|
||||
...............................#......#.................#..............................................#..........#.........................
|
||||
...........................................................................................................................................#
|
||||
.................#......#.......................#....................................#.....#..............................#.................
|
||||
.........#.............................................................#..................................#.................................
|
||||
....................................................#............#............#.........................................................#...
|
||||
..#.........................................................#........................................................#..........#...........
|
||||
............................................................................................................................................
|
||||
............................................................................................................................................
|
||||
.......#...........................#..............................................................#.........................................
|
||||
....................#...................................#................................................................#..................
|
||||
..............................#.............................................................................................................
|
||||
..#......................#.............................................#........#..........#................................................
|
||||
..........#.............................#......................#................................................................#...........
|
||||
.....................................................................................................#......................................
|
||||
......................#.............................................................................................#......................#
|
||||
#................#..................................#........................................#.................#............................
|
||||
...................................#......#.......................#...........#..........................................#.............#....
|
||||
............................................................................................................................................
|
||||
..........#..............................................#..................................................................................
|
||||
............................................................................................................................................
|
||||
....................#......#..........#.......................#......#....................#..........#.......#..................#...........
|
||||
...#.........................................................................#..............................................................
|
||||
..................................................................................#..............#..........................................
|
||||
........#.......................#..........#................................................................................................
|
||||
..............#...........................................................................................#.................................
|
||||
................................................................#.......................................................................#...
|
||||
.......................#................#.....................................................................#.............................
|
||||
....#............#............#.................................................................#.....#.....................................
|
||||
...................................................................................................................#........................
|
||||
...........................................#..............................................................................#.................
|
||||
.......#.........................................#.......#.......#.....#...............................................................#....
|
||||
................................................................................#...........#.....................................#.........
|
||||
...........#.....................................................................................#..........................................
|
||||
..............................................................#.............................................................................
|
||||
...............#.........#..........#........................................................................#..............................
|
||||
...........................................#......................................................................#......#..................
|
||||
....#...............#.......................................................................................................................
|
||||
......................................................................................#..............................................#......
|
||||
...............................................#...............#..............#.................#...........................................
|
||||
.#.........................................................................................#.........................#......................
|
||||
................#......#................#................................#..........................#...........#...........................
|
||||
......#......................#.....................#.......#................................................................................
|
||||
.............................................#...........................................................#...............#.....#........#...
|
||||
...........#.........................................................................#......................................................
|
||||
............................................................................#...............................................................
|
||||
.........................................................................................#............................#.....................
|
||||
...................#...................#.....................#....................................#.............#...........................
|
||||
.................................#..........................................................................................................
|
||||
.......#......#...........#..................................................................................................#.....#........
|
||||
.......................................................................#..............#........#.............#..............................
|
||||
......................#..................#......#..............#..............#.....................................#..................#....
|
||||
..........................................................................................#.............#...................................
|
||||
.........#..........................................#..............#.......................................................#................
|
||||
.............................#..............................................................................................................
|
||||
.............................................#...................................#..........................................................
|
||||
................#..................#........................................#......................................#........................
|
||||
....#.................#.................#.............................................#.................................#..................#
|
||||
............................................................#.........#..................................#..................................
|
||||
......................................................#...................................#.................................................
|
||||
.................................#..................................................................#.......................................
|
||||
.................................................#...................................................................................#......
|
||||
............................................................................................................................................
|
||||
..................#.............................................#.............#.........................#................#..................
|
||||
.........#.................................................#...........#.............#........#..............#............................#.
|
||||
...................................#.........................................................................................#..............
|
||||
............................................................................................................................................
|
||||
#.....................#...................................................#.......#...............................#.........................
|
||||
..............................#.................#........#..........................................................................#.......
|
||||
..............#........................................................................#....................................................
|
||||
...........................................#.............................................................#..............................#...
|
||||
.................................#...................................................................................#...........#..........
|
||||
...........#.......#.......#...........................#.....#................#......................#........#.............................
|
@ -0,0 +1,10 @@
|
||||
...#......
|
||||
.......#..
|
||||
#.........
|
||||
..........
|
||||
......#...
|
||||
.#........
|
||||
.........#
|
||||
..........
|
||||
.......#..
|
||||
#...#.....
|
Loading…
Reference in new issue