Advertisement
Guest User

Advent of Code Day 20 Solution

a guest
Dec 19th, 2021
361
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.56 KB | None | 0 0
  1. import numpy as np
  2.  
  3. data = np.genfromtxt('input', dtype='str', delimiter='Z') #delimiter = 'Z' is just my way of making sure it keeps lines together and doesn't decide to split them for no reason
  4.  
  5. enchancement = data[0]
  6.  
  7. image_str = data[1:]
  8.  
  9. image = np.zeros([4+len(image_str),4+len(image_str[0])])
  10.  
  11. for i in range(len(image_str)):
  12. image[2+i,2:-2] = [int(n) for n in image_str[i]]
  13.  
  14. def get_enhanced(image, enchancement):
  15. ret = 0*image
  16. for i in range(ret.shape[0]):
  17. for j in range(ret.shape[1]):
  18. ret[i,j] = int(enchancement[int(image[i,j])])
  19. return ret
  20.  
  21. def get_rolled(image):
  22. ret = 0
  23. ret += 2**8 * np.roll(image,(1,1),axis=(0,1))
  24. ret += 2**7 * np.roll(image,(1,0),axis=(0,1))
  25. ret += 2**6 * np.roll(image,(1,-1),axis=(0,1))
  26. ret += 2**5 * np.roll(image,(0,1),axis=(0,1))
  27. ret += 2**4 * np.roll(image,(0,0),axis=(0,1))
  28. ret += 2**3 * np.roll(image,(0,-1),axis=(0,1))
  29. ret += 2**2 * np.roll(image,(-1,1),axis=(0,1))
  30. ret += 2**1 * np.roll(image,(-1,0),axis=(0,1))
  31. ret += 2**0 * np.roll(image,(-1,-1),axis=(0,1))
  32. return ret
  33.  
  34. def enhance(image, enchancement):
  35. if image[0,0] == 0:
  36. new_image = np.ones([image.shape[0]+4,image.shape[1]+4])
  37. else:
  38. new_image = np.zeros([image.shape[0]+4,image.shape[1]+4])
  39. new_image[2:-2,2:-2] = get_rolled(image)
  40. new_image[2:-2,2:-2] = get_enhanced(new_image[2:-2,2:-2],enchancement)
  41. return new_image
  42.  
  43. #part1
  44. image = enhance(image, enchancement)
  45. image = enhance(image, enchancement)
  46.  
  47. print(np.sum(image))
  48.  
  49. #part2
  50. for i in range(48):
  51. image = enhance(image, enchancement)
  52.  
  53. print(np.sum(image))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement