diff --git a/2017/25/solution.py b/2017/25/solution.py index 7be806e..06bafac 100644 --- a/2017/25/solution.py +++ b/2017/25/solution.py @@ -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 diff --git a/2024/01/1.md b/2024/01/1.md new file mode 100644 index 0000000..09f7def --- /dev/null +++ b/2024/01/1.md @@ -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). + diff --git a/2024/01/solution.py b/2024/01/solution.py new file mode 100644 index 0000000..289ea14 --- /dev/null +++ b/2024/01/solution.py @@ -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) + diff --git a/README.md b/README.md index 234f6bb..cdcdde6 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ ## 2017 .-----------------------------------------------. - | o──────*──────┐o┬──────────────────┐┌───────┐ | 25 + | o──────*──────┐o┬──────────────────┐┌───────┐ | 25 * | o──*──┐└───┐o─┴─┘o────────┬─────o┌─┘├───o┌──┤ | 24 | ┌──┘o─┴────┘┌────────────*├──────┘o─┘┌───┘┌─┘ | 23 * | ├───┐┌──────┴o*──|(────┐┌┘└──────────┘o┬──┘o┐ | 22 ** diff --git a/__pycache__/fred.cpython-311.pyc b/__pycache__/fred.cpython-311.pyc index 5d45068..97648b5 100644 Binary files a/__pycache__/fred.cpython-311.pyc and b/__pycache__/fred.cpython-311.pyc differ diff --git a/fred.py b/fred.py index 5e782a9..e77c93d 100644 --- a/fred.py +++ b/fred.py @@ -12,6 +12,11 @@ def toGrid(input,parser=None): grid.append(list(line.rstrip())) 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): if log: print(x)