Advertisement
Guest User

Day 4 Advent of Code 2016

a guest
Dec 3rd, 2016
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.95 KB | None | 0 0
  1. from collections import Counter
  2. import re
  3.  
  4. with open("day_4.txt") as f:
  5.     inp_4 = f.read().strip()
  6. inp_4 = inp_4.split('\n')
  7.  
  8. # Part 1
  9.  
  10. def is_real(s, k):
  11.     s = Counter(s.replace('-', ''))
  12.     counts = sorted(s.items(), key=lambda x: (-x[1], x[0]))
  13.     return ''.join(map(lambda x: x[0], counts[:5])) == re.findall(r'\[(.*)\]', k)[0]
  14.  
  15. total = 0
  16. inp_filter = []
  17. for ele in inp_4:
  18.     s, k = ele.rsplit('-', 1)
  19.     if is_real(s, k):
  20.         num = int(re.findall(r'\d+', k)[0])
  21.         inp_filter.append([s, num])
  22.         total += num
  23.        
  24. print(total)
  25.  
  26. # Part 2 (builds on part 1)
  27.  
  28. import string
  29. def shift(s, k):
  30.     s = s.split('-')
  31.     k = k%26
  32.     d = {}
  33.     for c in string.ascii_lowercase:
  34.         d[c] = (ord(c) - ord('a') + k)%26 + ord('a')
  35.     table = str.maketrans(d)
  36.     return ' '.join(i.translate(table) for i in s)
  37.  
  38. for s, k in inp_filter:
  39.     b = shift(s, k)
  40.     if "northpole" in b:
  41.         print(k)
  42.         break
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement