day 11 part 1 done
This commit is contained in:
+140
-1
@@ -1 +1,140 @@
|
||||
Paste any inputs into this file.
|
||||
.............................................................................................#..............................................
|
||||
...#....................#............................#......................#........................#...........#................#.........
|
||||
................#.....................................................#..............#.....................#................................
|
||||
................................................................#.......................................................#...................
|
||||
.......#........................#.........................#..............................#.....#............................................
|
||||
............#............................#..................................................................................................
|
||||
......................#........................#......................................................#.....................................
|
||||
....................................#.....................................#.................#..........................................#....
|
||||
................................................................................................................#..............#............
|
||||
...................#.................................................#............................#.........................................
|
||||
............................................#.........#...............................#.................#...................................
|
||||
.....#.....................#..................................................#.............................................................
|
||||
........................................................................#.................#.................................................
|
||||
...............................................................#.....................................................#............#.........
|
||||
..............#.......................#...........................................#.........................................................
|
||||
.......................#.......................#...........................................................#................................
|
||||
.........#........................................................#.........................................................................
|
||||
.........................................................................#................................................................#.
|
||||
............................#..........................#........................#.....#...............................#.....................
|
||||
.....................................#..................................................................#....................#..............
|
||||
#...........................................................................................................................................
|
||||
..........#......................#...........#............#............#....................................................................
|
||||
....................#.........................................................#.................................#...........................
|
||||
.................................................#.............#.....................#..........#......................#..........#.........
|
||||
....................................#.......................................................................................................
|
||||
..........................................#..............................................................................................#..
|
||||
......................#.....................................................................................#.....#.........#...............
|
||||
...........#................#.............................#.............#.....................#.............................................
|
||||
#.................#...............................................#...........#.............................................................
|
||||
.......................................#.................................................#..................................................
|
||||
.....#.......................................#.......................................................#..............................#......#
|
||||
..............#.................#.................#..................#..............#..............................#........................
|
||||
...........................................................................#................................................................
|
||||
.........................#............................#....................................................#................#...............
|
||||
.#..............................................................................#...........................................................
|
||||
.......................................#................................#......................#............................................
|
||||
................#...........#...................#.......................................................................................#...
|
||||
..............................................................#..........................................................#..................
|
||||
.......#......................................................................#.........#.............#.....................................
|
||||
.......................................................#....................................................................................
|
||||
......................#................................................#....................................#.............................#.
|
||||
#.........................................#......................................................................#..........................
|
||||
..................................#................#............................................#.......#...................................
|
||||
.....#.....................#.............................#.............................#....................................................
|
||||
................#...............................................#...........................................................................
|
||||
...............................#................................................#....................#..........................#...........
|
||||
......................................................#....................#................#................#..............................
|
||||
..#..........................................#......................................................................#.......................
|
||||
.............#..............................................................................................................................
|
||||
.......................................................................................................................................#....
|
||||
.......................#..............#...........................#............................#...............#............................
|
||||
.........#..................#...............................................#...........#...................................................
|
||||
......................................................................#........................................................#............
|
||||
..............................................................#....................#...............#......#........#........................
|
||||
..............#...................#.............#.....................................................................................#.....
|
||||
............................................................................................................................................
|
||||
.....................#.....#............#...........#......................................#................................................
|
||||
..........#...................................................................................................................#...........#.
|
||||
...#......................................................................#.....................#................#..........................
|
||||
.............................................#...........................................................................#..................
|
||||
......................................................#...........#................#................#.................................#.....
|
||||
.................................#.....................................#..................#...............#......................#..........
|
||||
............................................................................................................................................
|
||||
.......#..............................................................................................................#.....................
|
||||
.....................#..............#......#.................................................#..............................................
|
||||
..............................#..................................#..............#............................#..............................
|
||||
..........#...............................................#............................#..........................................#.........
|
||||
#.................................................#...................#...........................#.........................................
|
||||
.......................................#....................................................................................................
|
||||
.......#...........................................................................#........................................................
|
||||
................#............................................#............................................#.........#....................#..
|
||||
.......................#........#.........#...............................................................................#.................
|
||||
............................................................................................................................................
|
||||
..#................#........................................................................................................................
|
||||
..........#...........................................#......................................#..............................................
|
||||
............................................................................................................................................
|
||||
.....#.....................................#...................#....................................................................#.......
|
||||
.........................#...........#............#.................................................................#....................#..
|
||||
........................................................#...............#...................................................................
|
||||
............#.................#.................................................#......#..............#.....................................
|
||||
.............................................................................................#................#................#............
|
||||
........................................#.......................#..........................................................................#
|
||||
..#.................#..........................#......................#.............#..............#...................#.............#......
|
||||
............................#............................#................................#......................#..........................
|
||||
.............#.................................................................................#............................................
|
||||
.................................#.........................................#................................................................
|
||||
.........................#.........................#.................................................#........................#.............
|
||||
.......#......................................................#.............................................................................
|
||||
............................................................................................................................................
|
||||
............................................................................................................................................
|
||||
.......................#.........................................................................................#..........................
|
||||
...#...........................#..................................................................#......#................#.................
|
||||
...............................................#................#...........................................................................
|
||||
....................#.................................#.................#.......#..........#........................................#.......
|
||||
...........#.................................................................................................#.............................#
|
||||
.#..................................................................................................#.......................................
|
||||
.....................................#.................................................................................#....................
|
||||
...............#.........#...........................................................#......................................................
|
||||
................................#........................#........#.........................................................................
|
||||
......#..........................................#.............................................................................#............
|
||||
...............................................................................................#.......#....................................
|
||||
...............................................................................................................#............................
|
||||
..............................#...........#............................#.................................................#............#.....
|
||||
...................#...........................#............................................................................................
|
||||
...............................................................#.....................#.....#................................................
|
||||
........#.................#.......................................................................................#...........#.............
|
||||
...............#............................#.........#.......................#...........................#.................................
|
||||
.#...................................#...................................#................................................................#.
|
||||
.........................................................................................#...........................................#......
|
||||
........................#...................................................................................................................
|
||||
....................................................................................................................#.......................
|
||||
........................................#.....#.........#.........#.........................................................................
|
||||
.......................................................................................#............#.......................................
|
||||
.#..............................#.............................................................#........................#.....#.....#........
|
||||
............#...............................................................#.................................#.........................#...
|
||||
..............................................................#.........................................#...................................
|
||||
........................#..............................#...............#........#.........#.................................................
|
||||
...................#........................#.......................................................................#.......................
|
||||
.......................................#...................................................................#................................
|
||||
..............#..................#..............#...................................................................................#.......
|
||||
........#......................................................#..............#.................#.........................................#.
|
||||
....................................................................#.......................................................#...............
|
||||
.............................#..........................................................................#...................................
|
||||
.................#..................................................................#.......................................................
|
||||
............................................#..........................#............................................#..............#........
|
||||
......#..............#..........................................#...........#..............................#................................
|
||||
............#.....................#.................................................................#.......................................
|
||||
...........................#.............#...............#..................................................................#...............
|
||||
#....................................................................................................................................#......
|
||||
.............................................................#.....................#........................................................
|
||||
.......#..........................................#.................#....................................#........#.......................#.
|
||||
..........................................................................................#.................................................
|
||||
..........................#..............................................#......................#...........................................
|
||||
...............................#.....................#..........................#.............................#.............................
|
||||
....#......#................................................#..........................#.......................................#............
|
||||
..................#.............................#...........................................................................................
|
||||
...........................................#..................................................#.............................................
|
||||
.......................#...........................................#...................................................#...................#
|
||||
.......#......#.............#.........................#..................#..............................#...........................#.......
|
||||
..#..............................................................................................................#..........................
|
||||
@@ -1,6 +1,106 @@
|
||||
import os
|
||||
from queue import Queue
|
||||
# import os
|
||||
|
||||
with open(r'advent_of_code\2023\day_11\input.txt', 'r') as file:
|
||||
input = file.read()
|
||||
input = file.readlines()
|
||||
|
||||
print(input)
|
||||
# print(input)
|
||||
|
||||
test_input = '''...#......
|
||||
.......#..
|
||||
#.........
|
||||
..........
|
||||
......#...
|
||||
.#........
|
||||
.........#
|
||||
..........
|
||||
.......#..
|
||||
#...#.....'''
|
||||
|
||||
#print(test_input)
|
||||
#input = test_input.split('\n')
|
||||
|
||||
def expand_universe(input):
|
||||
'''add an extra row or column of empty spaces to each row or column that has no # in it'''
|
||||
print('Expanding universe')
|
||||
# expand empty rows
|
||||
new_input = []
|
||||
for row in input:
|
||||
if '#' in row:
|
||||
new_input.append(row)
|
||||
else:
|
||||
new_input.append(row)
|
||||
new_input.append(row)
|
||||
|
||||
# expand empty columns
|
||||
|
||||
# Transpose the input
|
||||
transposed_input = list(map(list, zip(*new_input)))
|
||||
|
||||
new_input = []
|
||||
for row in transposed_input:
|
||||
if '#' in row:
|
||||
new_input.append(row)
|
||||
else:
|
||||
new_input.append(row)
|
||||
new_input.append(row)
|
||||
|
||||
# Transpose the input back
|
||||
new_input = list(map(list, zip(*new_input)))
|
||||
|
||||
# Convert rows back to strings
|
||||
new_input = [''.join(row) for row in new_input]
|
||||
|
||||
return new_input
|
||||
|
||||
input = expand_universe(input)
|
||||
|
||||
def number_galaxies(input):
|
||||
'''gives a unique number to each galaxy(#) in the input grid'''
|
||||
print('Numbering galaxies')
|
||||
# make a copy of the input
|
||||
input_copy = [list(row) for row in input] # Convert strings to lists
|
||||
# replace the galaxies with their numbers
|
||||
galaxy_number = 1
|
||||
galaxy_coordinates = {} # This dictionary will store the coordinates of each galaxy
|
||||
for i in range(len(input_copy)):
|
||||
for j in range(len(input_copy[i])):
|
||||
if input_copy[i][j] == '#':
|
||||
input_copy[i][j] = str(galaxy_number) # Convert number back to string
|
||||
galaxy_coordinates[galaxy_number] = (i, j) # Store the coordinates of the galaxy
|
||||
galaxy_number += 1 # Increment the galaxy number
|
||||
# Convert lists back to strings
|
||||
input_copy = [''.join(row) for row in input_copy]
|
||||
return input_copy, galaxy_coordinates
|
||||
|
||||
input, galaxy_coordinates = number_galaxies(input)
|
||||
#print(galaxy_coordinates)
|
||||
|
||||
def manhattan_distance(point1, point2):
|
||||
return abs(point1[0] - point2[0]) + abs(point1[1] - point2[1])
|
||||
|
||||
# find the shortest path between each pair of galaxies
|
||||
print('Finding the shortest path between each pair of galaxies')
|
||||
galaxy_distances = {}
|
||||
for galaxy in galaxy_coordinates:
|
||||
galaxy_distances[galaxy] = {}
|
||||
for other_galaxy in galaxy_coordinates:
|
||||
if galaxy != other_galaxy:
|
||||
galaxy_distances[galaxy][other_galaxy] = manhattan_distance(galaxy_coordinates[galaxy], galaxy_coordinates[other_galaxy])
|
||||
#print(galaxy_distances)
|
||||
|
||||
# remove the duplicate distances ie 1->2 and 2->1
|
||||
print('Removing the duplicate distances')
|
||||
for galaxy in galaxy_distances:
|
||||
for other_galaxy in galaxy_distances[galaxy]:
|
||||
if other_galaxy in galaxy_distances:
|
||||
del galaxy_distances[other_galaxy][galaxy]
|
||||
#print(galaxy_distances)
|
||||
|
||||
# sum up all the distances
|
||||
print('Summing up all the distances')
|
||||
total_distance = 0
|
||||
for galaxy in galaxy_distances:
|
||||
for other_galaxy in galaxy_distances[galaxy]:
|
||||
total_distance += galaxy_distances[galaxy][other_galaxy]
|
||||
print(total_distance)
|
||||
@@ -1 +1,89 @@
|
||||
# Day 11 Puzzle Text.
|
||||
|
||||
<article class="day-desc"><h2>--- Day 11: Cosmic Expansion ---</h2><p>You continue following signs for "Hot Springs" and eventually come across an <a href="https://en.wikipedia.org/wiki/Observatory" target="_blank">observatory</a>. The Elf within turns out to be a researcher studying cosmic expansion using the giant telescope here.</p>
|
||||
<p>He doesn't know anything about the missing machine parts; he's only visiting for this research project. However, he confirms that the hot springs are the next-closest area likely to have people; he'll even take you straight there once he's done with today's observation analysis.</p>
|
||||
<p>Maybe you can help him with the analysis to speed things up?</p>
|
||||
<p>The researcher has collected a bunch of data and compiled the data into a single giant <em>image</em> (your puzzle input). The image includes <em>empty space</em> (<code>.</code>) and <em>galaxies</em> (<code>#</code>). For example:</p>
|
||||
<pre><code>...#......
|
||||
.......#..
|
||||
#.........
|
||||
..........
|
||||
......#...
|
||||
.#........
|
||||
.........#
|
||||
..........
|
||||
.......#..
|
||||
#...#.....
|
||||
</code></pre>
|
||||
<p>The researcher is trying to figure out the sum of the lengths of the <em>shortest path between every pair of galaxies</em>. However, there's a catch: the universe expanded in the time it took the light from those galaxies to reach the observatory.</p>
|
||||
<p>Due to something involving gravitational effects, <em>only some space expands</em>. In fact, the result is that <em>any rows or columns that contain no galaxies</em> should all actually be twice as big.</p>
|
||||
<p>In the above example, three columns and two rows contain no galaxies:</p>
|
||||
<pre><code> v v v
|
||||
...#......
|
||||
.......#..
|
||||
#.........
|
||||
>..........<
|
||||
......#...
|
||||
.#........
|
||||
.........#
|
||||
>..........<
|
||||
.......#..
|
||||
#...#.....
|
||||
^ ^ ^
|
||||
</code></pre>
|
||||
<p>These rows and columns need to be <em>twice as big</em>; the result of cosmic expansion therefore looks like this:</p>
|
||||
<pre><code>....#........
|
||||
.........#...
|
||||
#............
|
||||
.............
|
||||
.............
|
||||
........#....
|
||||
.#...........
|
||||
............#
|
||||
.............
|
||||
.............
|
||||
.........#...
|
||||
#....#.......
|
||||
</code></pre>
|
||||
<p>Equipped with this expanded universe, the shortest path between every pair of galaxies can be found. It can help to assign every galaxy a unique number:</p>
|
||||
<pre><code>....1........
|
||||
.........2...
|
||||
3............
|
||||
.............
|
||||
.............
|
||||
........4....
|
||||
.5...........
|
||||
............6
|
||||
.............
|
||||
.............
|
||||
.........7...
|
||||
8....9.......
|
||||
</code></pre>
|
||||
<p>In these 9 galaxies, there are <em>36 pairs</em>. Only count each pair once; order within the pair doesn't matter. For each pair, find any shortest path between the two galaxies using only steps that move up, down, left, or right exactly one <code>.</code> or <code>#</code> at a time. (The shortest path between two galaxies is allowed to pass through another galaxy.)</p>
|
||||
<p>For example, here is one of the shortest paths between galaxies <code>5</code> and <code>9</code>:</p>
|
||||
<pre><code>....1........
|
||||
.........2...
|
||||
3............
|
||||
.............
|
||||
.............
|
||||
........4....
|
||||
.5...........
|
||||
.##.........6
|
||||
..##.........
|
||||
...##........
|
||||
....##...7...
|
||||
8....9.......
|
||||
</code></pre>
|
||||
<p>This path has length <code><em>9</em></code> because it takes a minimum of <em>nine steps</em> to get from galaxy <code>5</code> to galaxy <code>9</code> (the eight locations marked <code>#</code> plus the step onto galaxy <code>9</code> itself). Here are some other example shortest path lengths:</p>
|
||||
<ul>
|
||||
<li>Between galaxy <code>1</code> and galaxy <code>7</code>: 15</li>
|
||||
<li>Between galaxy <code>3</code> and galaxy <code>6</code>: 17</li>
|
||||
<li>Between galaxy <code>8</code> and galaxy <code>9</code>: 5</li>
|
||||
</ul>
|
||||
<p>In this example, after expanding the universe, the sum of the shortest path between all 36 pairs of galaxies is <code><em>374</em></code>.</p>
|
||||
<p>Expand the universe, then find the length of the shortest path between every pair of galaxies. <em>What is the sum of these lengths?</em></p>
|
||||
|
||||
<p>Your puzzle answer was <code>9724940</code>.</p><p class="day-success">The first half of this puzzle is complete! It provides one gold star: *</p>
|
||||
<article class="day-desc"><h2 id="part2">--- Part Two ---</h2><p>The galaxies are much <em>older</em> (and thus much <em>farther apart</em>) than the researcher initially estimated.</p>
|
||||
<p>Now, instead of the expansion you did before, make each empty row or column <em><span title="And you have to have your pinky near your mouth when you do it.">one million</span> times</em> larger. That is, each empty row should be replaced with <code>1000000</code> empty rows, and each empty column should be replaced with <code>1000000</code> empty columns.</p>
|
||||
<p>(In the example above, if each empty row or column were merely <code>10</code> times larger, the sum of the shortest paths between every pair of galaxies would be <code><em>1030</em></code>. If each empty row or column were merely <code>100</code> times larger, the sum of the shortest paths between every pair of galaxies would be <code><em>8410</em></code>. However, your universe will need to expand far beyond these values.)</p>
|
||||
<p>Starting with the same initial image, expand the universe according to these new rules, then find the length of the shortest path between every pair of galaxies. <em>What is the sum of these lengths?</em></p>
|
||||
|
||||
Reference in New Issue
Block a user