#!/bin/python3 import sys,re from pprint import pprint input_f = 'input' part = 2 ######################################### # # # Part 1 # # # ######################################### if part == 1: grid = [] values = {} with open(input_f) as file: for line in file: grid.append(line.rstrip()) #pprint(grid) pattern = r"(\w+)\s(inc|dec)\s(-?\d+)\sif\s(\w+)\s([<>=!]+)\s(-?\d+)" # Process each instruction for instruction in grid: match = re.match(pattern, instruction) if match: input_var = match.group(1) change = match.group(2) value = int(match.group(3)) con1 = match.group(4) con2 = match.group(5) con3 = int(match.group(6)) #print(f"input = {input_var}, change = {change}, value = {value}, con1 = {con1}, con2 = {con2}, con3 = {con3}") else: print(instruction) print('NO MATCH') exit() #print(f"input = {input_var}, change = {change}, value = {value}, con1 = {con1}, con2 = {con2}, con3 = {con3}") if input_var not in values: values[input_var] = 0 if con1 not in values: values[con1] = 0 condition = f"{values[con1]} {con2} {con3}" #print('calculation =======',condition) if eval(condition): if change == 'inc': values[input_var] += value if change == 'dec': values[input_var] -= value #pprint(values) max_v = 0 for key, i in values.items(): if max_v < i: max_v = i print(max_v) ######################################### # # # Part 2 # # # ######################################### def find_max(x): #print(x) max_v = 0 for key, i in values.items(): if max_v < i: max_v = i return max_v if part == 2: grid = [] values = {} total_max = 0 with open(input_f) as file: for line in file: grid.append(line.rstrip()) #pprint(grid) pattern = r"(\w+)\s(inc|dec)\s(-?\d+)\sif\s(\w+)\s([<>=!]+)\s(-?\d+)" # Process each instruction for instruction in grid: match = re.match(pattern, instruction) if match: input_var = match.group(1) change = match.group(2) value = int(match.group(3)) con1 = match.group(4) con2 = match.group(5) con3 = int(match.group(6)) #print(f"input = {input_var}, change = {change}, value = {value}, con1 = {con1}, con2 = {con2}, con3 = {con3}") else: print(instruction) print('NO MATCH') exit() #print(f"input = {input_var}, change = {change}, value = {value}, con1 = {con1}, con2 = {con2}, con3 = {con3}") if input_var not in values: values[input_var] = 0 if con1 not in values: values[con1] = 0 condition = f"{values[con1]} {con2} {con3}" #print('calculation =======',condition) if eval(condition): if change == 'inc': values[input_var] += value if change == 'dec': values[input_var] -= value temp_max = find_max(values) if total_max < temp_max: total_max = temp_max #print('New Max Found',total_max) print(total_max) #pprint(values)