Added 2017/10 part 2

This commit is contained in:
FrederikBaerentsen 2024-11-23 13:24:54 +01:00
parent adea09622c
commit a3a7d201b3
4 changed files with 60 additions and 6 deletions

View File

@ -89,8 +89,6 @@ first two numbers in the list*?
Your puzzle answer was `19591`. Your puzzle answer was `19591`.
The first half of this puzzle is complete! It provides one gold star: \*
## \-\-- Part Two \-\-- {#part2} ## \-\-- Part Two \-\-- {#part2}
The logic you\'ve constructed forms a single *round* of the *Knot Hash* The logic you\'ve constructed forms a single *round* of the *Knot Hash*
@ -163,7 +161,13 @@ Treating your puzzle input as a string of ASCII characters, *what is the
Knot Hash of your puzzle input?* Ignore any leading or trailing Knot Hash of your puzzle input?* Ignore any leading or trailing
whitespace you might encounter. whitespace you might encounter.
Answer: Your puzzle answer was `62e2204d2ca4f4924f6e7a80f1288786`.
Although it hasn\'t changed, you can still [get your puzzle 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](10/input). input](10/input).

View File

@ -1,13 +1,23 @@
#!/bin/python3 #!/bin/python3
import sys,re import sys,re
from pprint import pprint from pprint import pprint
from functools import reduce
from operator import xor
input_f = 'input' input_f = 'input'
def list2int(x): def list2int(x):
return list(map(int, x)) return list(map(int, x))
part = 1 def toACSII(x):
for idx,i in enumerate(x):
x[idx] = ord(i)
return x
def XOR(x):
return reduce(xor, map(int, t))
part = 2
######################################### #########################################
# # # #
# Part 1 # # Part 1 #
@ -46,4 +56,42 @@ if part == 1:
# # # #
######################################### #########################################
if part == 2: if part == 2:
exit()
size = 256
lengths = []
skip = 0
numbers = []
pos = 0
for i in range(0,size):
numbers.append(i)
with open(input_f) as file:
for line in file:
lengths = list(line.rsplit()[0].split()[0])
lengths = toACSII(lengths) + [17, 31, 73, 47, 23]
print(lengths)
for i in range(0,64):
for ldx, length in enumerate(lengths):
sub = [numbers[(pos + i) % len(numbers)] for i in range(length)]
rev = sub[::-1]
for i in range(length):
numbers[(pos + i) % len(numbers)] = rev[i]
pos += (length+skip)
pos = pos % len(numbers)
skip += 1
print(numbers)
dense = []
for i in range(0,16):
t = numbers[i*16:(i*16)+16]
dense.append(XOR(t))
for i in dense:
print(format(i, '02x'),end='')
print()

1
2017/10/test2 Normal file
View File

@ -0,0 +1 @@
1,2,3

1
2017/10/test3 Normal file
View File

@ -0,0 +1 @@
1,2,4