Added 2017
This commit is contained in:
parent
ef840affed
commit
3115c7c20f
85
2017/01/1.md
Normal file
85
2017/01/1.md
Normal file
@ -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).
|
43
2017/01/solution.py
Normal file
43
2017/01/solution.py
Normal file
@ -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)
|
70
2017/02/2.md
Normal file
70
2017/02/2.md
Normal file
@ -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).
|
28
2017/02/solution.py
Normal file
28
2017/02/solution.py
Normal file
@ -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 #
|
||||
# #
|
||||
#########################################
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user