This commit is contained in:
parent
b0acd1d834
commit
751de1955a
1 changed files with 68 additions and 0 deletions
68
2023/11/11_2.py
Normal file
68
2023/11/11_2.py
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# 2023 - Advent Of Code 11 - part 2
|
||||||
|
|
||||||
|
# file = 'input_example.txt'
|
||||||
|
file = 'input.txt'
|
||||||
|
EXPANSION = 1000000
|
||||||
|
|
||||||
|
# pylint: disable=consider-using-with
|
||||||
|
input_lines = [line.strip('\n') for line in open(file, encoding="utf-8")]
|
||||||
|
print(f'map: ({len(input_lines[0])}, {len(input_lines)})')
|
||||||
|
|
||||||
|
stars = []
|
||||||
|
for y, _ in enumerate(input_lines):
|
||||||
|
for x in range(0, len(_)):
|
||||||
|
# pylint: disable=unnecessary-list-index-lookup
|
||||||
|
if input_lines[y][x] == '#':
|
||||||
|
stars.append((x, y))
|
||||||
|
print(f'stars: {len(stars)}, map: ({len(input_lines[0])}, {len(input_lines)})')
|
||||||
|
|
||||||
|
# find empty lines
|
||||||
|
empty_lines = []
|
||||||
|
for y, _ in enumerate(input_lines):
|
||||||
|
if '#' not in input_lines[y]:
|
||||||
|
empty_lines.append(y)
|
||||||
|
print(f'empty lines: {empty_lines}')
|
||||||
|
|
||||||
|
# find empty columns
|
||||||
|
empty_columns = []
|
||||||
|
for x in range(0, len(input_lines[0])):
|
||||||
|
empty = True
|
||||||
|
for y, _ in enumerate(input_lines):
|
||||||
|
if input_lines[y][x] == '#':
|
||||||
|
empty = False
|
||||||
|
break
|
||||||
|
if empty:
|
||||||
|
empty_columns.append(x)
|
||||||
|
print(f'empty columns: {empty_columns}')
|
||||||
|
|
||||||
|
paths = []
|
||||||
|
for s1 in stars:
|
||||||
|
for s2 in stars:
|
||||||
|
if s1 != s2 and {s1, s2} not in paths:
|
||||||
|
paths.append({s1, s2})
|
||||||
|
print(f'number of paths: {len(paths)}')
|
||||||
|
|
||||||
|
|
||||||
|
# instead of extending the map, offset star coordinates
|
||||||
|
def expand_coord(num, compare_list):
|
||||||
|
i = 0
|
||||||
|
for i, star in enumerate(compare_list):
|
||||||
|
if num < star:
|
||||||
|
return i * (EXPANSION-1) + num
|
||||||
|
return (i+1) * (EXPANSION-1) + num
|
||||||
|
|
||||||
|
|
||||||
|
# dist = math.abs(x2-x1) + math.abs(y2-y1)
|
||||||
|
sum_path = 0
|
||||||
|
for path in paths:
|
||||||
|
p = list(path)
|
||||||
|
x1 = expand_coord(p[0][0], empty_columns)
|
||||||
|
x2 = expand_coord(p[1][0], empty_columns)
|
||||||
|
y1 = expand_coord(p[0][1], empty_lines)
|
||||||
|
y2 = expand_coord(p[1][1], empty_lines)
|
||||||
|
dist = abs(x1 - x2) + abs(y1 - y2)
|
||||||
|
sum_path += dist
|
||||||
|
print(f'{path} dist: {dist}')
|
||||||
|
|
||||||
|
print(f'{sum_path=}')
|
Loading…
Reference in a new issue