My Advent of Code solutions in Python. kevinyap.ca/2019/12/going-fast-in-advent-of-code/
advent-of-code python
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add 2017/10

+52
+49
2017/day10.py
··· 1 + import fileinput 2 + 3 + 4 + def knot_hash(elems, lengths, pos=0, skip=0): 5 + for l in lengths: 6 + for i in range(l // 2): 7 + x = (pos + i) % len(elems) 8 + y = (pos + l - i - 1) % len(elems) 9 + elems[x], elems[y] = elems[y], elems[x] 10 + 11 + pos = pos + l + skip % len(elems) 12 + skip += 1 13 + 14 + return elems, pos, skip 15 + 16 + 17 + # Read puzzle input 18 + line = fileinput.input()[0].strip() 19 + 20 + # Part 1 21 + try: 22 + lengths = [int(x) for x in line.split(',')] 23 + elems = knot_hash(range(0, 256), lengths)[0] 24 + print "Product of first two items in list:", elems[0] * elems[1] 25 + except ValueError: 26 + print "Skipping part 1 (can't parse puzzle input into ints)" 27 + 28 + # Part 2 29 + lengths = [ord(x) for x in line] + [17, 31, 73, 47, 23] 30 + elems = range(0, 256) 31 + pos = 0 32 + skip = 0 33 + 34 + # Perform 64 rounds of Knot Hash 35 + for _ in range(64): 36 + elems, pos, skip = knot_hash(elems, lengths, pos, skip) 37 + 38 + # Convert from sparse hash to dense hash 39 + sparse = elems 40 + dense = [] 41 + 42 + for i in range(16): 43 + res = 0 44 + for j in range(0, 16): 45 + res ^= sparse[(i * 16) + j] 46 + 47 + dense.append(res) 48 + 49 + print "Knot Hash of puzzle input:", ''.join(hex(x)[2:] for x in dense)
+1
2017/inputs/10.txt
··· 1 + 189,1,111,246,254,2,0,120,215,93,255,50,84,15,94,62
+2
2017/outputs/10.txt
··· 1 + 38415 2 + 9de8846431eef262be78f590e39a4848