Skip to content

Commit 28fb5b2

Browse files
committed
Day 11
1 parent fff88de commit 28fb5b2

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed

day11/day11.py

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
def find_empty_rows_and_columns(image):
2+
r = len(image)
3+
c = len(image[0])
4+
5+
# find empty rows and columns:
6+
row_is_empty = [True for _ in range(r)]
7+
col_is_empty = [True for _ in range(c)]
8+
for i in range(r):
9+
for j in range(c):
10+
if image[i][j] != '.':
11+
row_is_empty[i] = False
12+
col_is_empty[j] = False
13+
14+
empty_rows = [i for i in range(r) if row_is_empty[i]]
15+
empty_columns = [i for i in range(c) if col_is_empty[i]]
16+
return empty_rows, empty_columns
17+
18+
19+
def expand_galaxies(galaxies, empty_rows, empty_cols, expansion_factor=1000000):
20+
# shift by row:
21+
for row in empty_rows[::-1]:
22+
for i in range(len(galaxies)):
23+
if galaxies[i][0] > row:
24+
galaxies[i] = (galaxies[i][0] + expansion_factor-1, galaxies[i][1])
25+
26+
# shift by column:
27+
for col in empty_cols[::-1]:
28+
for i in range(len(galaxies)):
29+
if galaxies[i][1] > col:
30+
galaxies[i] = (galaxies[i][0], galaxies[i][1] + expansion_factor-1)
31+
32+
return galaxies
33+
34+
35+
def find_galaxy_positions(image):
36+
galaxies = []
37+
r = len(image)
38+
c = len(image[0])
39+
for i in range(r):
40+
for j in range(c):
41+
if image[i][j] == '#':
42+
galaxies.append((i,j))
43+
return galaxies
44+
45+
46+
def get_distance(galaxy1, galaxy2):
47+
return abs(galaxy1[0] - galaxy2[0]) + abs(galaxy1[1] - galaxy2[1])
48+
49+
50+
def find_distances_sum(galaxies):
51+
sum = 0
52+
for i in range(len(galaxies)):
53+
for j in range(i+1, len(galaxies)):
54+
distance = get_distance(galaxies[i], galaxies[j])
55+
sum += distance
56+
return sum
57+
58+
59+
def print_image(image):
60+
for r in image:
61+
print(''.join(r))
62+
63+
64+
def expand_and_find_distance_sum(image, expansion_factor):
65+
galaxies = find_galaxy_positions(image)
66+
empty_rows, empty_cols = find_empty_rows_and_columns(image)
67+
expand_galaxies(galaxies, empty_rows, empty_cols, expansion_factor)
68+
return find_distances_sum(galaxies)
69+
70+
71+
def read_data_from_file(filename):
72+
with open(filename) as file:
73+
image = [[c for c in line.rstrip()] for line in file]
74+
return image
75+
76+
77+
image = read_data_from_file("input.txt")
78+
# image = read_data_from_file("testinput.txt")
79+
80+
# part1_result = expand_and_find_distance_sum(image, 2)
81+
# print("Part 1:", part1_result)
82+
83+
part2_result = expand_and_find_distance_sum(image, 1000000)
84+
print("Part 2:", part2_result)

0 commit comments

Comments
 (0)