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 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 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) mat = mkmat(lines) expansion = empty_spaces(mat) coords = galaxies(mat) dists = manhattendistances(coords, expansion) print(f"Solution for Part 1: {sum([sum(i) for i in zip(*manhattendistances(coords, expansion, 1))])//2}") print(f"Solution for Part 1: {sum([sum(i) for i in zip(*manhattendistances(coords, expansion, 1000000-1))])//2}")