Sparrow1029

AoC 2017: Day 8 (Parts 1 & 2)

Dec 20th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.19 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3.  
  4. import re
  5.  
  6. with open('Day8input.txt', 'r') as f:
  7.     data = [s.strip() for s in f.read().splitlines()]
  8.  
  9. register_regex = re.compile(r"([a-z]+) (dec|inc) (-?\d+) if ([a-z]+) ([><!=]+) ([-]?\d+)")
  10.  
  11. registers = {}  # Create dict of registers and values
  12.  
  13. # First pass to find register names and set val to 0
  14. for line in data:
  15.     mo = re.search(register_regex, line)
  16.     rg_id = mo.groups()
  17.     for x in (rg_id[0], rg_id[3]):
  18.         if x not in registers:
  19.             registers[x] = 0
  20.  
  21. max_held = 0  # PART TWO
  22.  
  23. # Second pass perform operations on registers according to puzzle instructions
  24. for line in data:
  25.     mo = re.search(register_regex, line)
  26.     # print(mo.groups())
  27.     r = mo.groups()
  28.     # print(r[3], registers[r[3]])
  29.     # print(r[3:])
  30.     if eval(' '.join([str(registers[r[3]]), r[4], r[5]])):
  31.         if r[1] == 'inc':
  32.             registers[r[0]] += int(r[2])
  33.         elif r[1] == 'dec':
  34.             registers[r[0]] -= int(r[2])
  35.     # print(r[0], registers[r[0]], "\n")
  36.     if max_held < max(registers.values()):
  37.         max_held = max(registers.values())
  38.  
  39. print(max(registers.values()))  # PART ONE
  40. print(max_held)
Advertisement
Add Comment
Please, Sign In to add comment