Advertisement
HexTree

Advent of Code 2022 Day 20

Dec 20th, 2022
1,130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.19 KB | Source Code | 0 0
  1. data = []
  2.  
  3. with open('input', 'r') as f:
  4.     for i, line in enumerate(f.readlines()):
  5.         if line.strip():
  6.             data.append((i, int(line)))
  7.  
  8. print(data)
  9. n = len(data)
  10. order = data[:]
  11.  
  12. for idnum, x in order:
  13.     for i in range(n):
  14.         if data[i][0] == idnum:
  15.             break
  16.     for _ in range(abs(x)):
  17.         swap_i = (i + (x//abs(x))) % n
  18.         data[i], data[swap_i] = data[swap_i], data[i]
  19.         i = swap_i
  20.  
  21. for i in range(n):
  22.     if data[i][1] == 0:
  23.         break
  24. a = data[(i+1000)%n][1]
  25. b = data[(i+2000)%n][1]
  26. c = data[(i+3000)%n][1]
  27.  
  28. print("part 1:", a+b+c)
  29.  
  30. key = 811589153
  31. data = [(idnum, key*x) for (idnum, x) in order]
  32.  
  33. for count in range(10):
  34.     for idnum, x in order:
  35.         for i in range(n):
  36.             if data[i][0] == idnum:
  37.                 break
  38.         swaps = data[i][1] % (n-1)
  39.         for _ in range(abs(swaps)):
  40.             swap_i = (i + (swaps//abs(swaps))) % n
  41.             data[i], data[swap_i] = data[swap_i], data[i]
  42.             i = swap_i
  43.     print(count+1, data)
  44.  
  45. for i in range(n):
  46.     if data[i][1] == 0:
  47.         break
  48. a = data[(i+1000)%n][1]
  49. b = data[(i+2000)%n][1]
  50. c = data[(i+3000)%n][1]
  51.  
  52. print("part 2:", a+b+c)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement