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:
|
||||
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
|
||||
|
||||
.-----------------------------------------------.
|
||||
| o──────*──────┐o┬──────────────────┐┌───────┐ | 25
|
||||
| o──────*──────┐o┬──────────────────┐┌───────┐ | 25 *
|
||||
| o──*──┐└───┐o─┴─┘o────────┬─────o┌─┘├───o┌──┤ | 24
|
||||
| ┌──┘o─┴────┘┌────────────*├──────┘o─┘┌───┘┌─┘ | 23 *
|
||||
| ├───┐┌──────┴o*──|(────┐┌┘└──────────┘o┬──┘o┐ | 22 **
|
||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user