From 3115c7c20f04854247d7622d7fab2957b6e80f1d Mon Sep 17 00:00:00 2001 From: FrederikBaerentsen Date: Tue, 12 Nov 2024 19:21:32 +0100 Subject: [PATCH] Added 2017 --- 2017/01/1.md | 85 +++++++++++++++++++++++++++++++++++++++++++++ 2017/01/solution.py | 43 +++++++++++++++++++++++ 2017/02/2.md | 70 +++++++++++++++++++++++++++++++++++++ 2017/02/solution.py | 28 +++++++++++++++ 4 files changed, 226 insertions(+) create mode 100644 2017/01/1.md create mode 100644 2017/01/solution.py create mode 100644 2017/02/2.md create mode 100644 2017/02/solution.py diff --git a/2017/01/1.md b/2017/01/1.md new file mode 100644 index 0000000..36fe5f7 --- /dev/null +++ b/2017/01/1.md @@ -0,0 +1,85 @@ +## \-\-- Day 1: Inverse Captcha \-\-- + +The night before Christmas, one of Santa\'s Elves calls you in a panic. +\"The printer\'s broken! We can\'t print the *Naughty or Nice List*!\" +By the time you make it to [sub-basement +17]{title="Floor 17: cafeteria, printing department, and experimental organic digitization equipment."}, +there are only a few minutes until midnight. \"We have a big problem,\" +she says; \"there must be almost *fifty* bugs in this system, but +nothing else can print The List. Stand in this square, quick! There\'s +no time to explain; if you can convince them to pay you in *stars*, +you\'ll be able to\--\" She pulls a lever and the world goes blurry. + +When your eyes can focus again, everything seems a lot more pixelated +than before. She must have sent you inside the computer! You check the +system clock: *25 milliseconds* until midnight. With that much time, you +should be able to collect all *fifty stars* by December 25th. + +Collect stars by solving puzzles. Two puzzles will be made available on +each ~~day~~ millisecond in the Advent calendar; the second puzzle is +unlocked when you complete the first. Each puzzle grants *one star*. +Good luck! + +You\'re standing in a room with \"digitization quarantine\" written in +LEDs along one wall. The only door is locked, but it includes a small +interface. \"Restricted Area - Strictly No Digitized Users Allowed.\" + +It goes on to explain that you may only leave by solving a +[captcha](https://en.wikipedia.org/wiki/CAPTCHA) to prove you\'re *not* +a human. Apparently, you only get one millisecond to solve the captcha: +too fast for a normal human, but it feels like hours to you. + +The captcha requires you to review a sequence of digits (your puzzle +input) and find the *sum* of all digits that match the *next* digit in +the list. The list is circular, so the digit after the last digit is the +*first* digit in the list. + +For example: + +- `1122` produces a sum of `3` (`1` + `2`) because the first digit + (`1`) matches the second digit and the third digit (`2`) matches the + fourth digit. +- `1111` produces `4` because each digit (all `1`) matches the next. +- `1234` produces `0` because no digit matches the next. +- `91212129` produces `9` because the only digit that matches the next + one is the last digit, `9`. + +*What is the solution* to your captcha? + +Your puzzle answer was `1158`. + +## \-\-- Part Two \-\-- {#part2} + +You notice a progress bar that jumps to 50% completion. Apparently, the +door isn\'t yet satisfied, but it did emit a *star* as encouragement. +The instructions change: + +Now, instead of considering the *next* digit, it wants you to consider +the digit *halfway around* the circular list. That is, if your list +contains `10` items, only include a digit in your sum if the digit +`10/2 = 5` steps forward matches it. Fortunately, your list has an even +number of elements. + +For example: + +- `1212` produces `6`: the list contains `4` items, and all four + digits match the digit `2` items ahead. +- `1221` produces `0`, because every comparison is between a `1` and a + `2`. +- `123425` produces `4`, because both `2`s match each other, but no + other digit has a match. +- `123123` produces `12`. +- `12131415` produces `4`. + +*What is the solution* to your new captcha? + +Your puzzle answer was `1132`. + +Both parts of this puzzle are complete! They provide two gold stars: +\*\* + +At this point, you should [return to your Advent calendar](/2017) and +try another puzzle. + +If you still want to see it, you can [get your puzzle +input](1/input). diff --git a/2017/01/solution.py b/2017/01/solution.py new file mode 100644 index 0000000..24b68a9 --- /dev/null +++ b/2017/01/solution.py @@ -0,0 +1,43 @@ +#!/bin/python3 +import sys +from pprint import pprint + +input_f = "input" #sys.argv[1] + +arr = [] + +with open(input_f) as file: + for line in file: + arr = list(line.rstrip('\n')) +######################################### +# # +# Part 1 # +# # +######################################### +sum = 0 +for idx,x in enumerate(arr): + if idx != len(arr)-1: + if x == arr[idx+1]: + sum+=int(x) + else: + if x == arr[0]: + sum+=int(x) + +print(sum) + +######################################### +# # +# Part 2 # +# # +######################################### + +sum=0 +length=len(arr) + +for idx,x in enumerate(arr): + if idx != length: + print(x,arr[(int(length/2)+idx) % length]) + if x == arr[(int(length/2)+idx) % length]: + sum+=int(x) + +print(sum) diff --git a/2017/02/2.md b/2017/02/2.md new file mode 100644 index 0000000..1655364 --- /dev/null +++ b/2017/02/2.md @@ -0,0 +1,70 @@ +## \-\-- Day 2: Corruption Checksum \-\-- + +As you walk through the door, a glowing humanoid shape yells in your +direction. \"You there! Your state appears to be idle. Come help us +repair the corruption in this spreadsheet - if we take another +millisecond, we\'ll have to display an hourglass cursor!\" + +The spreadsheet consists of rows of apparently-random numbers. To make +sure the recovery process is on the right track, they need you to +calculate the spreadsheet\'s *checksum*. For each row, determine the +difference between the largest value and the smallest value; the +checksum is the sum of all of these differences. + +For example, given the following spreadsheet: + + 5 1 9 5 + 7 5 3 + 2 4 6 8 + +- The first row\'s largest and smallest values are `9` and `1`, and + their difference is `8`. +- The second row\'s largest and smallest values are `7` and `3`, and + their difference is `4`. +- The third row\'s difference is `6`. + +In this example, the spreadsheet\'s checksum would be `8 + 4 + 6 = 18`. + +*What is the checksum* for the spreadsheet in your puzzle input? + +Your puzzle answer was `34925`. + +The first half of this puzzle is complete! It provides one gold star: \* + +## \-\-- Part Two \-\-- {#part2} + +\"Great work; looks like we\'re on the right track after all. Here\'s a +*star* for your effort.\" However, the program seems a little worried. +Can programs *be* worried? + +\"Based on what we\'re seeing, it looks like all the User wanted is some +information about the *evenly divisible values* in the spreadsheet. +Unfortunately, none of us are equipped for that kind of calculation - +most of us specialize in [bitwise +operations]{title="Bonus points if you solve this part using only bitwise operations."}.\" + +It sounds like the goal is to find the only two numbers in each row +where one evenly divides the other - that is, where the result of the +division operation is a whole number. They would like you to find those +numbers on each line, divide them, and add up each line\'s result. + +For example, given the following spreadsheet: + + 5 9 2 8 + 9 4 7 3 + 3 8 6 5 + +- In the first row, the only two numbers that evenly divide are `8` + and `2`; the result of this division is `4`. +- In the second row, the two numbers are `9` and `3`; the result is + `3`. +- In the third row, the result is `2`. + +In this example, the sum of the results would be `4 + 3 + 2 = 9`. + +What is the *sum of each row\'s result* in your puzzle input? + +Answer: + +Although it hasn\'t changed, you can still [get your puzzle +input](2/input). diff --git a/2017/02/solution.py b/2017/02/solution.py new file mode 100644 index 0000000..5b2f855 --- /dev/null +++ b/2017/02/solution.py @@ -0,0 +1,28 @@ +#!/bin/python3 +import sys +from pprint import pprint + +input_f = "input" #sys.argv[1] +sum = 0 +with open(input_f) as file: + for line in file: + line = list(map(int,line.rstrip('\n').split())) +######################################### +# # +# Part 1 # +# # +######################################### + + sum+=(max(line)-min(line)) + +print(sum) + + +######################################### +# # +# Part 2 # +# # +######################################### + + +