From 8dc31fd9f7d49b260351060ce42bcc05353dc302 Mon Sep 17 00:00:00 2001 From: FrederikBaerentsen Date: Sun, 1 Dec 2024 12:58:38 +0100 Subject: [PATCH] Solved 2024/01 P1+P2 --- 2017/25/solution.py | 31 +++++++ 2024/01/1.md | 145 +++++++++++++++++++++++++++++++ 2024/01/solution.py | 49 +++++++++++ README.md | 2 +- __pycache__/fred.cpython-311.pyc | Bin 6402 -> 6885 bytes fred.py | 5 ++ 6 files changed, 231 insertions(+), 1 deletion(-) create mode 100644 2024/01/1.md create mode 100644 2024/01/solution.py 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 5d45068bfd03248309044b94da98a8baa4208e62..97648b558b802da2c9cef828584b45c3b0916a7f 100644 GIT binary patch delta 1199 zcmZuwOH5Ni6rFi}um2XLZFqb{K1QsSf=Cgi@=-K?SqMgLG^m|d(pV_Wd&Ey55Yt4B zE+i8|Of=CADlC++VN0SbH(-d1#)TV=Zj1>ojM2nhU-Uw9m&+^xySNdew0bvuVNzqbU;0jWkBtCMIQQOkx(zl8~63kz+DbG=*6;YeHr= znA?~=Lt=L30Ccb-=G2_br77TbXOx(Wd4P8_FQA7N0D2*3A>=Gzw1)(JUr0Sk-pPiHih)Qxz0V5sfJ=0tLkb&U*ZdN`U& z$1kPyHZa!RMX+422lz2TmR+5>Z~T7mv&f6q+18iFN+`M-iY^Yn4RtJsI&OCX; z?iFM1u$iGmyml|v;mz;{fS|;8qit4K%(T1-i3mb7!X7c}DOV1F*)HCAhCqANyH%mp za5Td%Q;x&~;1%zEN9k#?%^!h6=l#dJ@jd2G$Q<|)AfO-~8b>GCNUigxo#)Ni{Cd;& ziSK@c)`(;vO3TDd;FNL}LJuwc4$M-fVitVb@LO~T3wabwctO{7jt_)85b(M1c67*> z)9I9X%X~YMcrCmH0S`NOlpSc{o;j9zPT(a_)#p496TDmfm#9#~RizR=K<{^bBRKvC L?c$_5FQd9YYDD=n delta 744 zcmXw0OKTHR6rM9PcP5W{G}SyeZDNha+B7W*l~Rf>wGe!Oi`fLqofaXQ^dtoZLD1|3 zK`zBz!Hr_YMG3m`HwX%@g3y&h7lNQ}TzSr<8JO>W_q*Tu?&ExKJYM!*yKX|G@BQY+ z_Fw0@muqj)?1d&Z32iMHj}UnMDF$XBq&3h2OWK6CoRYCHCgY(& ztBHXK;xb8kLOO&==@L4W<57+);g(iO9qwPy#nQ^+a((zoSD+lLWu<6;oK`zlPNa$Y z>X|jK|JH^dt*0PnNI9i8VlN@1e#YKT=h>_iRP>Q?=UyKR>L6YeB~nW2b9@~#LqD+x z`Z1_i$x^n!_S0;)(P4guVNM+-7etNdS(S3WQuGgJw^(EwARng(1heQ9qCJ5n_0TPn zci+7~(_oXqrrEJ=WNnB27KV6<#JXyDRdP!2OY)ne!S?S$l-4^jDooh|6*%* fJ94)juH$W*0{y*j1iuUbP{;W) 1] + def lprint(x:str,log:bool): if log: print(x)