Advent of Code 2016 solutions https://adventofcode.com/2016/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

04.py 904B

12345678910111213141516171819
  1. #!/usr/bin/python3
  2. import re
  3. from collections import namedtuple
  4. with open('data/04.txt', 'r') as file:
  5. Room = namedtuple('Room', 'name sector checksum')
  6. rooms = [Room(*re.search(r'^(.*?)-([0-9]+)\[(.*?)\]$', l).groups()) for l in file.readlines()]
  7. checksum = lambda x: re.sub(r'(.)\1+', r'\1',
  8. ''.join(sorted(x.name.replace('-', ''),
  9. key=lambda c: -128 * x.name.count(c) + ord(c)))
  10. )[:5]
  11. valid = [room for room in rooms if room.checksum == checksum(room)]
  12. print("Part one: %s" % sum([int(room.sector) for room in valid]))
  13. for room in valid:
  14. decoded = ''.join([' ' if c == '-' else chr(97 + (int(room.sector) + ord(c) - 97) % 26) for c in room.name])
  15. if 'north' in decoded:
  16. print("Part two: '%s' is in sector %s" % (decoded, room.sector))