Solved 2024/01 P1+P2
This commit is contained in:
parent
4cb6a22981
commit
8dc31fd9f7
@ -91,6 +91,37 @@ states = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
# print(states)
|
||||||
|
|
||||||
|
# max_steps = 6
|
||||||
|
# begin_state = 'A'
|
||||||
|
|
||||||
|
# states = {
|
||||||
|
# 'A': {
|
||||||
|
# 0: {
|
||||||
|
# 'W': 1,
|
||||||
|
# 'M': 'R',
|
||||||
|
# 'C': 'B'
|
||||||
|
# },
|
||||||
|
# 1: {
|
||||||
|
# 'W': 0,
|
||||||
|
# 'M': 'L',
|
||||||
|
# 'C': 'B'
|
||||||
|
# }
|
||||||
|
# },
|
||||||
|
# 'B': {
|
||||||
|
# 0: {
|
||||||
|
# 'W': 1,
|
||||||
|
# 'M': 'L',
|
||||||
|
# 'C': 'A'
|
||||||
|
# },
|
||||||
|
# 1: {
|
||||||
|
# 'W': 1,
|
||||||
|
# 'M': 'R',
|
||||||
|
# 'C': 'A'
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
|
||||||
if part == 1:
|
if part == 1:
|
||||||
end = False
|
end = False
|
||||||
|
145
2024/01/1.md
Normal file
145
2024/01/1.md
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
## \-\-- Day 1: Historian Hysteria \-\--
|
||||||
|
|
||||||
|
The *Chief Historian* is always present for the big Christmas sleigh
|
||||||
|
launch, but nobody has seen him in months! Last anyone heard, he was
|
||||||
|
visiting locations that are historically significant to the North Pole;
|
||||||
|
a group of Senior Historians has asked you to accompany them as they
|
||||||
|
check the places they think he was most likely to visit.
|
||||||
|
|
||||||
|
As each location is checked, they will mark it on their list with a
|
||||||
|
*star*. They figure the Chief Historian *must* be in one of the first
|
||||||
|
fifty places they\'ll look, so in order to save Christmas, you need to
|
||||||
|
help them get *fifty stars* on their list before Santa takes off on
|
||||||
|
December 25th.
|
||||||
|
|
||||||
|
Collect stars by solving puzzles. Two puzzles will be made available on
|
||||||
|
each day in the Advent calendar; the second puzzle is unlocked when you
|
||||||
|
complete the first. Each puzzle grants *one star*. Good luck!
|
||||||
|
|
||||||
|
You haven\'t even left yet and the group of Elvish Senior Historians has
|
||||||
|
already hit a problem: their list of locations to check is currently
|
||||||
|
*empty*. Eventually, someone decides that the best place to check first
|
||||||
|
would be the Chief Historian\'s office.
|
||||||
|
|
||||||
|
Upon pouring into the office, everyone confirms that the Chief Historian
|
||||||
|
is indeed nowhere to be found. Instead, the Elves discover an assortment
|
||||||
|
of notes and lists of historically significant locations! This seems to
|
||||||
|
be the planning the Chief Historian was doing before he left. Perhaps
|
||||||
|
these notes can be used to determine which locations to search?
|
||||||
|
|
||||||
|
Throughout the Chief\'s office, the historically significant locations
|
||||||
|
are listed not by name but by a unique number called the *location ID*.
|
||||||
|
To make sure they don\'t miss anything, The Historians split into two
|
||||||
|
groups, each searching the office and trying to create their own
|
||||||
|
complete list of location IDs.
|
||||||
|
|
||||||
|
There\'s just one problem: by holding the two lists up *side by side*
|
||||||
|
(your puzzle input), it quickly becomes clear that the lists aren\'t
|
||||||
|
very similar. Maybe you can help The Historians reconcile their lists?
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
3 4
|
||||||
|
4 3
|
||||||
|
2 5
|
||||||
|
1 3
|
||||||
|
3 9
|
||||||
|
3 3
|
||||||
|
|
||||||
|
Maybe the lists are only off by a small amount! To find out, pair up the
|
||||||
|
numbers and measure how far apart they are. Pair up the *smallest number
|
||||||
|
in the left list* with the *smallest number in the right list*, then the
|
||||||
|
*second-smallest left number* with the *second-smallest right number*,
|
||||||
|
and so on.
|
||||||
|
|
||||||
|
Within each pair, figure out *how far apart* the two numbers are;
|
||||||
|
you\'ll need to *add up all of those distances*. For example, if you
|
||||||
|
pair up a `3` from the left list with a `7` from the right list, the
|
||||||
|
distance apart is `4`; if you pair up a `9` with a `3`, the distance
|
||||||
|
apart is `6`.
|
||||||
|
|
||||||
|
In the example list above, the pairs and distances would be as follows:
|
||||||
|
|
||||||
|
- The smallest number in the left list is `1`, and the smallest number
|
||||||
|
in the right list is `3`. The distance between them is `2`.
|
||||||
|
- The second-smallest number in the left list is `2`, and the
|
||||||
|
second-smallest number in the right list is another `3`. The
|
||||||
|
distance between them is `1`.
|
||||||
|
- The third-smallest number in both lists is `3`, so the distance
|
||||||
|
between them is `0`.
|
||||||
|
- The next numbers to pair up are `3` and `4`, a distance of `1`.
|
||||||
|
- The fifth-smallest numbers in each list are `3` and `5`, a distance
|
||||||
|
of `2`.
|
||||||
|
- Finally, the largest number in the left list is `4`, while the
|
||||||
|
largest number in the right list is `9`; these are a distance `5`
|
||||||
|
apart.
|
||||||
|
|
||||||
|
To find the *total distance* between the left list and the right list,
|
||||||
|
add up the distances between all of the pairs you found. In the example
|
||||||
|
above, this is `2 + 1 + 0 + 1 + 2 + 5`, a total distance of `11`!
|
||||||
|
|
||||||
|
Your actual left and right lists contain many location IDs. *What is the
|
||||||
|
total distance between your lists?*
|
||||||
|
|
||||||
|
Your puzzle answer was `2769675`.
|
||||||
|
|
||||||
|
## \-\-- Part Two \-\-- {#part2}
|
||||||
|
|
||||||
|
Your analysis only confirmed what everyone feared: the two lists of
|
||||||
|
location IDs are indeed very different.
|
||||||
|
|
||||||
|
Or are they?
|
||||||
|
|
||||||
|
The Historians can\'t agree on which group made the mistakes *or* how to
|
||||||
|
read most of the Chief\'s handwriting, but in the commotion you notice
|
||||||
|
an interesting detail: [a
|
||||||
|
lot]{title="We were THIS close to summoning the Alot of Location IDs!"}
|
||||||
|
of location IDs appear in both lists! Maybe the other numbers aren\'t
|
||||||
|
location IDs at all but rather misinterpreted handwriting.
|
||||||
|
|
||||||
|
This time, you\'ll need to figure out exactly how often each number from
|
||||||
|
the left list appears in the right list. Calculate a total *similarity
|
||||||
|
score* by adding up each number in the left list after multiplying it by
|
||||||
|
the number of times that number appears in the right list.
|
||||||
|
|
||||||
|
Here are the same example lists again:
|
||||||
|
|
||||||
|
3 4
|
||||||
|
4 3
|
||||||
|
2 5
|
||||||
|
1 3
|
||||||
|
3 9
|
||||||
|
3 3
|
||||||
|
|
||||||
|
For these example lists, here is the process of finding the similarity
|
||||||
|
score:
|
||||||
|
|
||||||
|
- The first number in the left list is `3`. It appears in the right
|
||||||
|
list three times, so the similarity score increases by `3 * 3 = 9`.
|
||||||
|
- The second number in the left list is `4`. It appears in the right
|
||||||
|
list once, so the similarity score increases by `4 * 1 = 4`.
|
||||||
|
- The third number in the left list is `2`. It does not appear in the
|
||||||
|
right list, so the similarity score does not increase (`2 * 0 = 0`).
|
||||||
|
- The fourth number, `1`, also does not appear in the right list.
|
||||||
|
- The fifth number, `3`, appears in the right list three times; the
|
||||||
|
similarity score increases by `9`.
|
||||||
|
- The last number, `3`, appears in the right list three times; the
|
||||||
|
similarity score again increases by `9`.
|
||||||
|
|
||||||
|
So, for these example lists, the similarity score at the end of this
|
||||||
|
process is `31` (`9 + 4 + 0 + 0 + 9 + 9`).
|
||||||
|
|
||||||
|
Once again consider your left and right lists. *What is their similarity
|
||||||
|
score?*
|
||||||
|
|
||||||
|
Your puzzle answer was `24643097`.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars:
|
||||||
|
\*\*
|
||||||
|
|
||||||
|
At this point, you should [return to your Advent calendar](/2024) and
|
||||||
|
try another puzzle.
|
||||||
|
|
||||||
|
If you still want to see it, you can [get your puzzle
|
||||||
|
input](1/input).
|
||||||
|
|
49
2024/01/solution.py
Normal file
49
2024/01/solution.py
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
#!/bin/python3
|
||||||
|
import sys,re
|
||||||
|
from collections import Counter
|
||||||
|
from pprint import pprint
|
||||||
|
sys.path.insert(0, '../../')
|
||||||
|
from fred import list2int,get_re,nprint,lprint
|
||||||
|
|
||||||
|
input_f = 'input'
|
||||||
|
|
||||||
|
part = 2
|
||||||
|
|
||||||
|
def loadList(input_f):
|
||||||
|
left = []
|
||||||
|
right = []
|
||||||
|
|
||||||
|
with open(input_f) as file:
|
||||||
|
for line in file:
|
||||||
|
l = line.rstrip().split()
|
||||||
|
left.append(int(l[0]))
|
||||||
|
right.append(int(l[1]))
|
||||||
|
return left,right
|
||||||
|
|
||||||
|
|
||||||
|
#########################################
|
||||||
|
# #
|
||||||
|
# Part 1 #
|
||||||
|
# #
|
||||||
|
#########################################
|
||||||
|
if part == 1:
|
||||||
|
sum = 0
|
||||||
|
left,right = loadList(input_f)
|
||||||
|
for i in range(len(left)):
|
||||||
|
sum += abs((left.pop(left.index(min(left)))-right.pop(right.index(min(right)))))
|
||||||
|
print(sum)
|
||||||
|
|
||||||
|
|
||||||
|
#########################################
|
||||||
|
# #
|
||||||
|
# Part 2 #
|
||||||
|
# #
|
||||||
|
#########################################
|
||||||
|
if part == 2:
|
||||||
|
sim = 0
|
||||||
|
left,right = loadList(input_f)
|
||||||
|
right = Counter(right)
|
||||||
|
for i in range(len(left)):
|
||||||
|
sim += (left[i] * right[left[i]])
|
||||||
|
print(sim)
|
||||||
|
|
@ -57,7 +57,7 @@
|
|||||||
## 2017
|
## 2017
|
||||||
|
|
||||||
.-----------------------------------------------.
|
.-----------------------------------------------.
|
||||||
| o──────*──────┐o┬──────────────────┐┌───────┐ | 25
|
| o──────*──────┐o┬──────────────────┐┌───────┐ | 25 *
|
||||||
| o──*──┐└───┐o─┴─┘o────────┬─────o┌─┘├───o┌──┤ | 24
|
| o──*──┐└───┐o─┴─┘o────────┬─────o┌─┘├───o┌──┤ | 24
|
||||||
| ┌──┘o─┴────┘┌────────────*├──────┘o─┘┌───┘┌─┘ | 23 *
|
| ┌──┘o─┴────┘┌────────────*├──────┘o─┘┌───┘┌─┘ | 23 *
|
||||||
| ├───┐┌──────┴o*──|(────┐┌┘└──────────┘o┬──┘o┐ | 22 **
|
| ├───┐┌──────┴o*──|(────┐┌┘└──────────┘o┬──┘o┐ | 22 **
|
||||||
|
Binary file not shown.
5
fred.py
5
fred.py
@ -12,6 +12,11 @@ def toGrid(input,parser=None):
|
|||||||
grid.append(list(line.rstrip()))
|
grid.append(list(line.rstrip()))
|
||||||
return grid
|
return grid
|
||||||
|
|
||||||
|
|
||||||
|
def findDupes(input:list):
|
||||||
|
# Returns the indicies of duplicate values in list
|
||||||
|
return [item for item in set(input) if input.count(item) > 1]
|
||||||
|
|
||||||
def lprint(x:str,log:bool):
|
def lprint(x:str,log:bool):
|
||||||
if log:
|
if log:
|
||||||
print(x)
|
print(x)
|
||||||
|
Loading…
Reference in New Issue
Block a user