import sys from pprint import pprint import re from itertools import product from collections import defaultdict instructions = [] with open(sys.argv[1]) as file: tmp = [] for line in file: tmp = [re.match(r'.+?(?=\d)',line).group().strip()] tmp += [int(i) for i in re.findall(r'\d+',line)] instructions.append(tmp) size = 1000 maps = defaultdict(bool) #maps = [ [False]*size for i in range(size)] for i in instructions: for x in product(range(i[1],i[3]+1),range(i[2],i[4]+1)): if i[0] == 'turn off': maps[x] = False elif i[0] == 'turn on': maps[x] = True else: if maps[x] == True: maps[x] = False else: maps[x] = True #for y in range(i[1],i[3]+1): # for x in range(i[2],i[4]+1): # if i[0] == 'turn off': # maps[x][y] = False # elif i[0] == 'turn on': # maps[x][y] = False # else: # maps[x][y] = True if maps[x][y] == False else maps[x][y] == True count = 0 for i in product(range(0,size),range(0,size)): if maps[i] == True: count += 1 print(count)