From a3a7d201b3d9bbaba05afc8009dd100a5d7bc4f5 Mon Sep 17 00:00:00 2001 From: FrederikBaerentsen Date: Sat, 23 Nov 2024 13:24:54 +0100 Subject: [PATCH] Added 2017/10 part 2 --- 2017/10/10.md | 12 +++++++---- 2017/10/solution.py | 52 +++++++++++++++++++++++++++++++++++++++++++-- 2017/10/test2 | 1 + 2017/10/test3 | 1 + 4 files changed, 60 insertions(+), 6 deletions(-) create mode 100644 2017/10/test2 create mode 100644 2017/10/test3 diff --git a/2017/10/10.md b/2017/10/10.md index e677260..4d00aa5 100644 --- a/2017/10/10.md +++ b/2017/10/10.md @@ -89,8 +89,6 @@ first two numbers in the list*? Your puzzle answer was `19591`. -The first half of this puzzle is complete! It provides one gold star: \* - ## \-\-- Part Two \-\-- {#part2} 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 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). diff --git a/2017/10/solution.py b/2017/10/solution.py index fc9b799..95efd77 100644 --- a/2017/10/solution.py +++ b/2017/10/solution.py @@ -1,13 +1,23 @@ #!/bin/python3 import sys,re from pprint import pprint +from functools import reduce +from operator import xor input_f = 'input' def list2int(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 # @@ -46,4 +56,42 @@ if part == 1: # # ######################################### 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() diff --git a/2017/10/test2 b/2017/10/test2 new file mode 100644 index 0000000..b0246d5 --- /dev/null +++ b/2017/10/test2 @@ -0,0 +1 @@ +1,2,3 diff --git a/2017/10/test3 b/2017/10/test3 new file mode 100644 index 0000000..4210650 --- /dev/null +++ b/2017/10/test3 @@ -0,0 +1 @@ +1,2,4